镜像
拉取镜像(下载镜像)
镜像是层次型的,拉取的时候会按照各层分别拉取。
每一个镜像都有自己的散列值,用来唯一标记一层镜像,可以用来判断本地是否已经拉取过此镜像层,如果已经拉取,则直接使用。
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命令修改)