17-Docker镜像和容器操作

镜像

拉取镜像(下载镜像)

镜像是层次型的,拉取的时候会按照各层分别拉取。
每一个镜像都有自己的散列值,用来唯一标记一层镜像,可以用来判断本地是否已经拉取过此镜像层,如果已经拉取,则直接使用。

docker image pull centos:7      #拉取镜像centos:7

输出:
7: Pulling from library/centos      #
ab5ef0e58194: Pull complete         #先下载压缩包,再解压,最后显示Pull complete
Digest: sha256:4a701376d03f6b39b8c2a8f4a8e499441b0d567f9ab9d58e4991de4472fb813c     #镜像的散列值
Status: Downloaded newer image for centos:7
docker.io/library/centos:7
[root@localhost ~]# docker image pull nginx
Using default tag: latest   
latest: Pulling from library/nginx
68ced04f60ab: Pull complete     #这里代表这个镜像那个有三层
28252775b295: Pull complete 
a616aa3b0bf2: Pull complete 
Digest: sha256:2539d4344dd18e1df02be842ffc435f8e1f699cfc55516e2cf2cb16b7a9aea0b
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest

查看镜像

[root@localhost ~]# docker image ls     #查看所有镜像
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              6678c7c2e56c        2 weeks ago         127MB
centos              7                   5e35e350aded        4 months ago        203MB

#解释
#IMAGE ID:镜像的ID(唯一标识镜像), 如果两个镜像的ID 相同, 说明它们实际上指向了同一个镜像

#参数
-a      #显示所有镜像(包括中间层镜像)
-q      #只显示IMAGE ID
docker images       #和docker image ls一样
[root@localhost ~]# docker image history 5e35       #查看镜像构建历史
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
5e35e350aded        4 months ago        /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B                  
<missing>           4 months ago        /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B                  
<missing>           4 months ago        /bin/sh -c #(nop) ADD file:45a381049c52b5664…   203MB               
  • 在Docker中,镜像和容器都有自己的散列值,我们输入前面几个散列值既可操作这个镜像和容器。如上例中的5e35
docker inspect 5e35     #查看镜像或容器的详细信息
docker search centos      #在仓库中搜索centos的镜像
NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
centos                             The official build of CentOS.                   5892                [OK]                
ansible/centos7-ansible            Ansible on Centos7                              128                                     [OK]
jdeathe/centos-ssh                 OpenSSH / Supervisor / EPEL/IUS/SCL Repos - …   114                                     [OK]
consol/centos-xfce-vnc             Centos container with "headless" VNC session…   111                                     [OK]
centos/mysql-57-centos7            MySQL 5.7 SQL database server                   71                                      
imagine10255/centos6-lnmp-php56    centos6-lnmp-php56                              58                                      [OK]

#解释:
#NAME:镜像名
#DESCRIPTION:代表镜像描述
#STARS:标星数(标星数越大代表越多人关注)

#参数:
docker search --filter=stars=100 centos        #只显示100星以上的镜像

修改镜像tag

docker image tag centos:7 centos:eagle      #将centos:7的tag改为centos:eagle

删除镜像

docker image rm centos:7    #删除镜像centos:7

导入导出镜像

  • 导出
docker image save -o /root/centos_7.tar centos:7
  • 导入
docker image load -i centos_7.tar

容器

容器是一个动态的,是根据镜像启动的。就好像一个应用。

从一个例子入门
docker run centos:7 echo 'Hello world'      #根据镜像centos:7启动一个容器
#默认前台启动,输出'Hello world'之后退出

通常情况下,会运行一个后台程序:如nginx,我们希望容器后台运行:

[root@localhost ~]# docker container run -d -it centos:7        #根据镜像centos:7后台运行容器
d29b0344b210bec7d251beb30a392c4d9bf384a8e8a81ab22eaa9d86ca88c6ba        #容器的散列值,唯一标记该容器

#参数解释:
-d      #后台运行
-it     #分配一个交互界面(否则无法进入)
docker exec -it d29b bash       #进入容器d29b

#参数解释:
-it     #分配一个交互界面(否则无法进入)
bash    #使用bash进行交互
  • 退出容器使用命令exit
运行容器
docker container run -d -it centos:7 bash
    -it     #分配一个交互界面(否则无法进入)(通常和参数bash一起用)
    bash    #使用bash进行交互(通常和参数-it一起用)
	--name mycentos		#给容器命名为mycentos
	-h fight	#设置容器主机名
	-d			#后台运行(可使用-it前台运行),并返回ID
	--rm		#运行结束之后删除容器
	--privileged	#给予特权
停止容器
docker container stop 9f4s	#不会删除存储层
启动容器
docker container start d29b     #启动
docker container restart d29b     #重启
删除容器
docker container rm 9f4s    #删除一个已经退出的容器
    -f      #强制删除一个容器(即使正在运行)
查询容器
docker container ls     #查看Up状态的容器
    -a      #查看所有容器(包括退出的容器)
    -q      #只显示容器id
docker container inspect 04b7       #查看容器的详细信息

Docker网络管理

容器默认连接到docker0这个网段(可以使用ip a查看)

  • 容器网络设置
--network	#指定网络(默认docker0)
--ip		#指定ip(docker0不支持指定)
  • 容器端口映射
docker container run --name web1 -p 8080:80 -d nginx    #将本机的8080端口 映射到 容器的80端口
firewall-cmd --add-port=8080/tcp
firewall-cmd --add-port=8080/tcp --per
#测试:http://192.168.191.131:8080/ (替换成你的CentOS的地址)
  • 其他网络参数
-p 192.168.159.129::80/udp	#随机分配一个端口,并指定协议
-P			#随机端口映射
--dns 11.11.11.11	#指定容器的DNS服务器

导出导入容器

docker container export -o /root/centos_eagle.tar 088c      #导出容器
docker import centos_eagle.tar      #导入容器(导入后成为一个镜像,没有名字,也没有tag,可以使用tag命令修改)

发布了129 篇原创文章 · 获赞 57 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/NetRookieX/article/details/105011891