1、启动这个容器: docker run -itd centos
查看这个容器: docker ps
[root@localhost_001 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2e1518f22125 centos "/bin/bash" 9 seconds ago Up 5 seconds upbeat_lichterman
[root@localhost_001 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2e1518f22125 centos "/bin/bash" 14 seconds ago Up 10 seconds upbeat_lichterman
2、如何进入到一个容器下: docker exec 容器ID (CONTAINER ID) bash
exec 后面可以更 容器 ID(前六位) , 也可以是 容器的 NAMES
[root@localhost_001 ~]# docker exec -it 2e1518 bash
[root@2e1518f22125 /]# ls
anaconda-post.log dev home lib64 mnt proc run srv tmp var
bin etc lib media opt root sbin sys usr
[root@2e1518f22125 /]# df -h
Filesystem Size Used Avail Use% Mounted on
overlay 36G 4.3G 32G 12% /
tmpfs 64M 0 64M 0% /dev
tmpfs 489M 0 489M 0% /sys/fs/cgroup
/dev/sda3 36G 4.3G 32G 12% /etc/hosts
shm 64M 0 64M 0% /dev/shm
tmpfs 489M 0 489M 0% /proc/asound
tmpfs 489M 0 489M 0% /proc/acpi
tmpfs 489M 0 489M 0% /proc/scsi
tmpfs 489M 0 489M 0% /sys/firmware
[root@2e1518f22125 /]# free
total used free shared buff/cache available
Mem: 999700 636412 96948 1772 266340 176564
Swap: 4194300 7648 4186652
注释:容器就是一个阉割版的操作系统,大约只有100M: 可以看到磁盘和内存都和宿主机的大小是一样的;并且可以使用的命令只有600多个;
如下:在容器是不能查看IP地址的,所有需要安装 net-tools 这个包;
ot@2e1518f22125 /]# ifconfig
bash: ifconfig: command not found
[root@2e1518f22125 /]# yum install -y net-tools
[root@2e1518f22125 /]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.2 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet)
RX packets 2446 bytes 9684204 (9.2 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2072 bytes 115550 (112.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
注释:可以看到IP地址变成172.17.0.2,这是docker生成的一个网段,类似于vmware的net8 NAT模式,每开启一个docker就会生成一个新的网卡生成;
然后此时查看宿主机也有这几个网段了;
[root@localhost_001 ~]# ifconfig
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
inet6 fe80::42:5bff:fe9e:626f prefixlen 64 scopeid 0x20<link>
ether 02:42:5b:9e:62:6f txqueuelen 0 (Ethernet)
RX packets 2100 bytes 88502 (86.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2462 bytes 9685740 (9.2 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
3、现在可以把这个容器的变更保存到镜像里去,做成一个新的镜像了;比如:在这个容器里安装 net-tools 命令,下次可以直接使用这个容器,这样可以查看ifconig这个命令,而就不需要再重新安装了;
docker commit -m "install net-tools" -a "yuanhh" 2e1518f22125 centos_with_net
-m "后面跟加的一些改动信息" -a "表示那个作者改动的"
[root@localhost_001 ~]# docker commit -m "install net-tools" -a "yuanhh" 2e1518f22125 centos_with_net
sha256:e9fff0b4ad1ad2fba2c142532ebc085e04105b56e707ee343f5b2029b88328d8
[root@localhost_001 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos_with_net latest e9fff0b4ad1a 15 seconds ago 280MB
ubuntu latest 94e814e2efa8 39 hours ago 88.9MB
centos latest 1e1148e4cc2c 3 months ago 202MB
fenye latest 1e1148e4cc2c 3 months ago 202MB
yuanhh 190312 1e1148e4cc2c 3 months ago 202MB
4、可以运行上面生成的那个镜像试试; docker run -itd centos_with_net
并进入这个容器: docker exec -it dreamy_aryabhata bash
[root@localhost_001 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
288405f3fde6 centos_with_net "/bin/bash" 12 seconds ago Up 8 seconds dreamy_aryabhata
2e1518f22125 centos "/bin/bash" 20 minutes ago Up 20 minutes upbeat_lichterman
[root@localhost_001 ~]# docker exec -it dreamy_aryabhata bash
[root@288405f3fde6 /]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.3 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:ac:11:00:03 txqueuelen 0 (Ethernet)
RX packets 8 bytes 648 (648.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
注释:发现可以直接运行这个ifconfig 这个命令,因为这个容器是之前的容器保存成镜像的,并且还发现和之前的那个容器是在一个网段的; 172.17.0.3
5、docker使用模板创建镜像:
1、首先去官网openvz.org 下载一个模板: https://download.openvz.org/template/precreated/centos-6-x86-minimal.tar.gz
[root@localhost_001 ~]# wget https://download.openvz.org/template/precreated/centos-6-x86-minimal.tar.gz
--2019-03-14 10:10:27-- https://download.openvz.org/template/precreated/centos-6-x86-minimal.tar.gz
正在连接 download.openvz.org (download.openvz.org)|185.231.241.69|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:210291971 (201M) [application/x-gzip]
正在保存至: “centos-6-x86-minimal.tar.gz”
2、导入该镜像: cat centos-6-x86-minimal.tar.gz |docker import - centos
[root@localhost_001 ~]# cat centos-6-x86-minimal.tar.gz |docker import - centos6
sha256:afa1f6db949f4ad7ae513ac5de1c9803355fa35ce8420fb3d67fb90d8fe3e48d
3、查看这个镜像: docker images | 第一个就是;
[root@localhost_001 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos6 latest afa1f6db949f 15 minutes ago 512MB
centos_with_net latest e9fff0b4ad1a 11 hours ago 280MB
ubuntu latest 94e814e2efa8 2 days ago 88.9MB
centos latest 1e1148e4cc2c 3 months ago 202MB
fenye latest 1e1148e4cc2c 3 months ago 202MB
yuanhh 190312 1e1148e4cc2c 3 months ago 202MB
启动并进入到这个容器: docker run -itd centos bash | docker ps
[root@localhost_001 ~]# docker run -itd centos6 bash #启动这个容器;
b340e953ed68ca4461a52ea061310bb1f7a5a0773437e79acad158556d13dd4a
[root@localhost_001 ~]# docker ps #查看当前运行的容器;
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b340e953ed68 centos6 "bash" 12 seconds ago Up 6 seconds peaceful_herschel
[root@localhost_001 ~]# docker exec -it b340e95 bash #进入这个容器;
[root@b340e953ed68 /]# ifconfig #查看这个网卡;
eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:02
inet addr:172.17.0.2 Bcast:172.17.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:16 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1296 (1.2 KiB) TX bytes:0 (0.0 b)
[root@b340e953ed68 /]# cat /etc/issue #查看系统版本
CentOS release 6.8 (Final)
Kernel \r on an \m
注释:而且和宿主机使用的是同一个内核; 只是主机名不同而已;
4、把现有镜像导出为一个文件: docker save -o yuanhh_centos_with(新文件名) centos_with_net(旧文件名)
[root@localhost_001 ~]# docker save -o yuanhh_centos_with centos_with_net
[root@localhost_001 ~]# ls
yuanhh_centos_with
注释: 我们还可以使用这个文件恢复本地镜像;
docker load --input yuanhh_centos_with 或者 docker load < yuanhh_centos_with
[root@localhost_001 ~]# docker rmi -f centos_with_net #删除这个镜像, -f 表示强制删除
Untagged: centos_with_net:latest
Deleted: sha256:e9fff0b4ad1ad2fba2c142532ebc085e04105b56e707ee343f5b2029b88328d8
[root@localhost_001 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos6 latest afa1f6db949f 33 minutes ago 512MB
ubuntu latest 94e814e2efa8 2 days ago 88.9MB
centos latest 1e1148e4cc2c 3 months ago 202MB
fenye latest 1e1148e4cc2c 3 months ago 202MB
yuanhh 190312 1e1148e4cc2c 3 months ago 202MB
[root@localhost_001 ~]# docker load < yuanhh_centos_with #恢复;
Loaded image: centos_with_net:latest
[root@localhost_001 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos6 latest afa1f6db949f 35 minutes ago 512MB
centos_with_net latest e9fff0b4ad1a 12 hours ago 280MB
其中如上导出镜像和导入镜像命令: save 和 load 是一对;
然后导入镜像和导出镜像命令: export 和 import 是一对;
5、当然也可以把自己的镜像导入传到 dockerhub官网上去,但是前提需要注册一个用户才可以;
docker push image name
6、容器管理; docker create -it 镜像名称 docker start|stop|restart 容器ID
创建一个容器,但是该容器并没有启动: docker create -it centos6 bash 用 docker ps -a 才能查看到;
启动一个容器: docker start|stop|restart 容器ID(CONTAINER ID) 启动|关闭|重启
[root@localhost_001 ~]# docker create -it centos bash #创建一个容器
1c9e512ff5a1e8f4d506963ddeb97a93681de97cae4c7d2b02b9cb3784c2c967
[root@localhost_001 ~]# docker ps -a #查看这个容器; 状态显示 created 状态
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1c9e512ff5a1 centos "bash" 4 seconds ago Created silly_knuth
8a021ac19c69 fenye "/bin/bash" 2 minutes ago Up 2 minutes kind_jones
注释:发现以上页面显示 created 启动状态; 启动成功后用 docker ps 就可以查看到了;
docker start 1c9e512ff5a1(容器ID)
[root@localhost_001 ~]# docker start 1c9e512ff5a1
1c9e512ff5a1
[root@localhost_001 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1c9e512ff5a1 centos "bash" 6 minutes ago Up 2 seconds silly_knuth
8a021ac19c69 fenye "/bin/bash" 9 minutes ago Up 8 minutes kind_jones
b340e953ed68 centos6 "bash" 11 hours ago Up 3 minutes peaceful_herschel
注释:其实这样子: docker run -tid 镜像名称 就等同于是 先 create 再 start
7、直接进入这个容器操作: docker run -it centos bash
可以允许一些命令,然后使用 exit 和 ctrl+d 退出后,这个容器也会停止; 因为没有加 -d , -d 则表示在后台运行这个容器;
[root@localhost_001 ~]# docker run -it fenye bash
[root@3d6aa960c09a /]# ifconig
bash: ifconig: command not found
[root@3d6aa960c09a /]# yum install -y net-tools > /dev/null
[root@3d6aa960c09a /]# exit #退出
exit
[root@localhost_001 ~]# docker ps #退出后发现这个容器也没有在运行了;
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e10f1c3ae75e centos "bash" 8 minutes ago Up 8 minutes zealous_galois
注释: 当然也可以只让容器在后台运行: docker run -d centos
8、 当然也可以只让容器在后台运行: docker run -d centos
比如:可以是用 -c 选项让docker 运行一个命令,然后在退出; docker run -d fenye bash -c "while :;do echo "123";sleep 2;done"
[root@localhost_001 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4b299a44f97d fenye "bash -c 'while :;do…" 41 seconds ago Up 37 seconds eager_chatelet
e10f1c3ae75e centos "bash" 13 minutes ago Up 13 minutes zealous_galois
[root@localhost_001 ~]#
[root@localhost_001 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4b299a44f97d fenye "bash -c 'while :;do…" About a minute ago Up About a minute eager_chatelet
#注释:每隔两秒打印 一次123就可以;
9、给容器自定义名称: 如上图最右侧的 NAME 参数; docker rum -itd --name ubuntu_test ubuntu bash
[root@localhost_001 ~]# docker run -itd --name ubuntu_test ubuntu bash
894dc0c4a29c22a66db30a5ce4c23b558520602b524b5450ad9dfbbef2aab16a
[root@localhost_001 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
894dc0c4a29c ubuntu "bash" 17 seconds ago Up 14 seconds ubuntu_test
e10f1c3ae75e centos "bash" 20 minutes ago Up 19 minutes zealous_galois
然后进入这个容器时,就可以加 NAME 就可以了; docker exec -it ubuntu_test
当然也可以加 容器 ID 进入: docker exec -it 894dc0c4a29c
[root@localhost_001 ~]# docker exec -it ubuntu_test bash
root@894dc0c4a29c:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
10、也可以让容器 执行完某个命令后直接删除; docker run --rm -it fenye bash -c "sleep 60"
[root@localhost_001 ~]# docker run --rm -itd fenye bash -c "sleep 60"
4570ff07657196736ba8246e08c8a6c76278a4b6edf9d8d3479c7360a2163c4a
[root@localhost_001 ~]#
[root@localhost_001 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4570ff076571 fenye "bash -c 'sleep 60'" 3 seconds ago Up 2 seconds eager_wilbur
894dc0c4a29c ubuntu "bash" 8 minutes ago Up 8 minutes ubuntu_test
[root@localhost_001 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
894dc0c4a29c ubuntu "bash" 10 minutes ago Up 10 minutes ubuntu_test
11、获取容器运行的历史信息: docker logs 容器ID
[root@localhost_001 ~]# docker run -itd fenye bash -c "echo yuanhh"
463522739e5ece95445b7ce85d3e112fa3cb99fb34a519fc33c98ee087bf3c89
[root@localhost_001 ~]#
[root@localhost_001 ~]# docker logs 46352273
yuanhh
注释:docker attach 可以进入一个后台运行的容器, 比如: docker attach aa964fd01624(容器ID) 但是 attach 这个命令并不好用,如果使用这个进入后台容器,再退出exit,然后就会直接退出这个容器了; 也可以使用 ctrl+q ,临时退出这个容器,不会退出后台程序;
[root@localhost_001 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
aa964fd01624 fenye "bash" 5 seconds ago Up 3 seconds gallant_cray
894dc0c4a29c ubuntu "bash" 20 minutes ago Up 20 minutes ubuntu_test
[root@localhost_001 ~]# docker attach aa964fd01624
[root@aa964fd01624 /]# exit
exit
[root@localhost_001 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
894dc0c4a29c ubuntu "bash" 25 minutes ago Up 25 minutes ubuntu_test
当然,还有一个办法, docker exec -itd 容器ID(CONTAINEA ID) bash 这样就算是用exit退出后,容器仍然会在后台运行;
12、删除容器: docker rm 容器ID(CONTAINEA ID) 这样可以把容器删除掉,如果在运行着的容器,则需要加上 -f 选项;
[root@localhost_001 ~]# docker rm 288405f3fde6
288405f3fde6
[root@localhost_001 ~]# docker rm 8a021ac19c69
8a021ac19c69
[root@localhost_001 ~]# docker rm -f e10f1c3ae75e
e10f1c3ae75e
[root@localhost_001 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
894dc0c4a29c ubuntu "bash" 33 minutes ago Up 33 minutes ubuntu_test
1c9e512ff5a1 centos "bash" About an hour ago Up About an hour silly_knuth
13、导出容器: export 容器ID > file.tar 容器导出之后可以迁移到其它机器去使用的;
[root@localhost_001 ~]# docker export 894dc0c4a29c > file.tar
[root@localhost_001 ~]#
[root@localhost_001 ~]# ls -ld file.tar
-rw-r--r-- 1 root root 72308736 3月 14 22:53 file.tar
导入容器并生成镜像: cat file.tar |docker import - yuanhh_test 导入容器并生成 yuanhh_test镜像;
[root@localhost_001 ~]# cat file.tar |docker import - yuanhh_test
sha256:56830bb9c4023bc2bd691fe4f5cce59fcb47d0ce81043d49f3f516c1e330fe75
[root@localhost_001 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
yuanhh_test latest 56830bb9c402 7 seconds ago 69.8MB
centos6 latest afa1f6db949f 12 hours ago 512MB