Docker命令操作

Posted wshlym

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker命令操作相关的知识,希望对你有一定的参考价值。

使用docker命令需要管理员权限,如果希望每次输入docker相关命令时,不用sudo,可通过以下命令进行设置

sudo usermod -a -G docker $USER
sudo service docker restart
newgrp - docker

官方提供的ubuntu系统镜像,工具命令很少,如希望内部安装ping、ifconfig网卡或者vim等工具,可以通过以下命令进行设置[需要联网,而且耗时]

apt-get update
apt install net-tools        # ifconfig 
apt install iputils-ping     # ping

镜像操作

# 搜索镜像  
docker search 镜像名
# 拉取镜像
docker pull 镜像名
# 查看所有镜像
docker image ls || docker images || docker images ls --all
# 运行镜像创建为容器<"这里的内容为可选参数">
docker run -itd <-p,-v...> <--name=别名>镜像名字<:版本>
# 删除镜像(需要镜像没有成为容器在运行)
docker image rm 镜像名  || docker rmi 镜像名<id> || docker rmi -f 镜像名<id>  # -f 强制删除加显示信息

# 批量操作删除镜像
docker rmi `docker image ps -aq `
# 导入镜像
docker load -i 路径文件名.tar <镜像名> ||  docker load < 路径文件名.tar.gz
# 保存镜像<打包>
docker save -o 文件名.tar <镜像名>    || docker save 镜像名 > 路径文件名.tar.gz
# 提交自己定义的镜像
docker commit 镜像id 镜像名

参数

exec        # 进入容器的参数
-i          # 交互式的操作容器
-t          # 开启一个terminel终端,用于和linux交互
-d         # 后台运行容器
/bin/sh    # 指定使用centos的bash解释器
bash      # 进入容器命令窗口,配合-it使用
-c         # 运行一段shell命令
    
docker search  hello-docker     # 搜索docker镜像 ,就是去 docker hub搜索 hello-docker而已
docker pull hello-world         # 下载公网的,docker镜像
docker image ls                # 查看本地的镜像有哪些
docker images                  # 这两条命令一样的,docker进行了很多的命令升级,不用慌
docker run hello-world         # 运行一个docker镜像,产生一个容器实例
docker container  ls           # 列出所有正在运行的容器
docker ps  -a              # 列出所有曾经运行过的容器记录,以及正在运行的容器记录
docker pull  centos             # 下载cnetos镜像

容器操作

必须要有镜像

# 运行镜像后台创建为容器<"这里的内容为可选参数">-p主机端口:指定端口,-v主机路径:指定路径
docker run -itd <-p,-v...> <--name=别名>镜像名字<:版本>
# 单纯的创建容器           || 创建容器并输出hehe
docker run hello-world   || docker run --name namecentos -it centos /bin/echo "hehe"
# 查看容器
docker container ls || docker ps -a 
# 启动容器
docker container start 容器名或id
# 停止容器
docker container stop 容器名或id
# 强制停止容器
docker container kill 容器名或id
# 批量操作容器
docker stop/start/rm `docker ps -aq`
# 进入容器
docker container exec -it 容器名或id  bash  || docker exec -it 容器id bash
# 删除容器
docker container rm 容器名或id
# 把容器保存成镜像
docker commit <容器名或id> <新镜像名>
# 查看容器日志
docker logs 容器id
# 查看容器端口映射本地
docker port 容器id
# 查看容器内的进程
docker top 容器id

删除过程(停止容器->删除容器->删除镜像)

docker container stop <容器名称/容器ID>
docker container rm  <容器名称/容器ID>
docker image rm <容器名称/容器ID>

重新拷贝一个镜像加修改名称

docker tag 镜像名:版本 10.0.3.33:5000/新镜像名:版本
docker tag hello-world:latest 10.0.3.33:5000/hello-world:latest

仓库操作

docker提供了一个类似于github的仓库dockerhub, 
网址https://hub.docker.com/

在linux登录docker仓库

docker login
# 提示输入账户和密码

注意要保证image的tag是账户名,如果镜像名字不对,需要改一下tag

改镜像名

# 语法是:  docker tag 镜像名 账户名/新镜像名
docker tag nginx wsh885/newnginx1.0

推送docker image到dockerhub

推送镜像到仓库

docker push wsh885/newnginx1.0:latest(版本)

下载仓库中的镜像

docker pull wsh885/newginx1.0

搭建内部使用的私有仓库

官方提供的私有仓库docker registry用法

https://yeasy.gitbooks.io/docker_practice/repository/registry.html

1.下载registry镜像并且启动私有仓库容器

docker pull registry

私有仓库会被创建在容器的/var/lib/registry下,因此通过-v参数将镜像文件存储到本地的/opt/data/registry
端口映射容器中的5000端口到宿主机的5000端口(不用-it加了也进不了容器里面)

docker run -d -p 5000:5000 -v /opt/docker/registry:/var/lib/registry registry

2.检查启动的registry容器

docker ps -a 

http://10.0.3.33:5000

3.修改镜像tag,以docker_registry的地址端口开头

注意:需要这样格式的镜像名,不然上传不了

docker tag 镜像名:版本 10.0.3.33:5000/新镜像名:版本
docker tag redis:latest 10.0.3.33:5000/newredis:latest
docker images

4.Docker 默认不允许非 HTTPS 方式推送镜像。我们可以通过 Docker 的配置选项来取消这个限制,这里必须写正确json数据

vim /etc/docker/daemon.json
// 添加一行配置("insecure-registries":["10.0.3.33:5000"]):
   // 这条是容器加速器
  "registry-mirrors": ["http://95822026.m.daocloud.io"],
  "insecure-registries":["10.0.3.33:5000"]

5.将daemon.json配置文件写入到docker服务中,写入到[Service]配置块中,加载此配置文件

vim /lib/systemd/system/docker.service

[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecReload=/bin/kill -s HUP $MAINPID
# 加这一条
EnvironmentFile=-/etc/docker/daemon.json
TimeoutSec=0
RestartSec=2
Restart=always

6.修改了docker配置文件之后,重新加载docker

systemctl daemon-reload

7.重启docker服务

systemctl restart docker  # 注意,重启docker服务,所有的容器都会挂掉

8.重启了dockerr容器

# 启动registry服务
docker ps -a 
docker start 容器id
docker start `docker ps -aq` # 批量启动

9.上传镜像到私有仓库

docker ps -a
docker push 10.0.3.33:5000/newredis
# 再创建一个
docker tag mysql:latest 10.0.3.33:5000/newmysql:latest
# 再上传
docker push 10.0.3.33:5000/newmysql

10.使用以下链接访问仓库, 可以查看到我们上传的镜像

http://10.0.3.33:5000/v2/_catalog
# 可以到目录里面去看
cd /opt/docker/registry/docker/registry/v2/repositories/

11.当我们上传到私有仓库完成之后,相当于已经备份过了这个镜像, 那我们就可以删除本地的这个镜像,如果要使用的话,就直接从私有仓库下载下来使用

# 删除
docker rmi 容器名字
docker rmi 10.0.3.33:5000/newredis
# 下载
docker pull 10.0.3.33:5000/newredis

自定义docker容器(dockerfile)

1.创建下载文件

/opt下建立了docker目录,创建文件和下载一个django-2.1.7的源码包

touch Dockerfilerun.sh 其中run.sh是用来执行Djanog的bash脚本,Dockerfile即为自动build python的文件,此处建立容器的核心也是Dockerfile

下载阿里云扩展源epel.repo文件

# 在/opt/docker/目录中下载
wget https://media.djangoproject.com/releases/2.1/Django-2.1.7.tar.gz
wget -O epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

2.编写Dockerfile文件

FROM centos
MAINTAINER TigerLee

ADD epel.repo /etc/yum.repos.d  # 将当前目录的epel.repo文件拷贝到容器的/etc/yum.repos.d目录下
RUN yum update -y               # 运行命令

RUN yum install -y python36
RUN yum install -y python36-pip
RUN pip3 install setuptools
ADD Django-2.1.7.tar.gz /opt/

WORKDIR /opt/                   # 进入/opt目录
RUN mv Django-2.1.7 django      # 运行命令mv

WORKDIR /opt/django             # 进入/opt/django目录
RUN python3 setup.py install

WORKDIR /opt
RUN django-admin.py startproject qishidj

ADD run.sh /opt/qishidj/run.sh
RUN sed -i "s/ALLOWED_HOSTS = \\[\\]/ALLOWED_HOSTS = \\['\\*'\\]/g" /opt/qishidj/qishidj/settings.py   # 替换django的配置文件,允许任何主机都可以访问
WORKDIR /opt/qishidj
RUN chmod 777 run.sh
EXPOSE 8000                        # 声明容器端口
CMD ["/bin/sh","run.sh"]           # 容器启动时默认执行的命令

3.编写run.sh

python3 manage.py runserver 0.0.0.0:8000

4.构建docker镜像

sudo docker build -t django_file-217 .    # 注意,有一个点,表示在当前页
# 构建完成后,查看镜像,有当前创建的django_file-217镜像文件
docker images

5.启动创建启动容器

docker run -itd -p 9090:8000 django_file-217

6.查看

docker ps -a                        # 查看容器状态,运作中则可以进入容器
docker exec -it 容器id bash         # 使用交互式模式进入容器,再使用ps -ef查看运行的进程
ps -ef                             # 有运行状态则表示成功
# 外部通过访问ip:9090 即可访问django启动画面了
# 查看docker的log日志
docker logs -f container_id(容器id) # -f为持续显示

7.导出镜像

# 如果想容器保存为镜像用此命令 ---> docker commit <容器名或id> <新镜像名>
# 本身已经有镜像了,直接导出 # -o 参数  指定地址和文件名   镜像名
docker save -o mydjango.tar.gz django_file-217  # 这样就有一个解压包了

8.推送到仓库

# 推送到线上自己的仓库
docker login        # 登录
docker tag django_file-217 wsh885/mydjango_217
docker push wsh885/mydjango_217

docker 镜像加速器

加速器镜像站:https://www.daocloud.io/mirror#accelerator-doc
资料:https://www.cnblogs.com/pyyu/p/6925606.html


# 一条命令加速
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io

# 这条命令其实就是改了docker的一个配置文件里面的注册镜像地址, 可以查看一下 
cat /etc/docker/daemon.json   
### 添加 ###

多端口多路径映射

查看docker port 容器id

docker run -itd --name=88luffy -p 80:80 -v /home/ubuntu/luffyo/luffyclient/dist/:/usr/share/nginx/html -p 8080:80 -v /home/ubuntu/luffyo/luffyserver/luffyserver/static/:/usr/share/nginx/static nginx

以上是关于Docker命令操作的主要内容,如果未能解决你的问题,请参考以下文章

Docker操作命令

Docker命令操作

docker 常用操作命令整理

节二:Docker常用操作命令与实践

节二:Docker常用操作命令与实践

Docker常用操作命令