练习环境:

操作系统:CentOS Linux release 7.5.1804 (Core) 

虚拟工具:VMware

应用容器引擎: Docker version 1.13.1

一.镜像

容器其实是在镜像的最上面加了一层读写层,在运行容器里做的任何文件改动,都会写到这个读写层。如果容器删除了,最上面的读写也就删除了,改动也就丢

失了。

1.配置成国内镜像

方法一:docker官方

#vi /etc/docker/daemon.json

{

"registry-mirrors": ["https://registry.docker-cn.com/"]

}

方法二:阿里

[root@docker /]# cat /etc/docker/daemon.json 

{

"registry-mirrors": ["https://9cpn8tt6.mirror.aliyuncs.com"]

}

2.镜像常用命令操作

[root@docker /]# systemctl restart docker

#下载指定版本镜像

[root@docker /]# docker pull nginx:1.12

#显示所有镜像

[root@docker /]# docker  images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

busybox             v2                  6e9545b1e2a2        17 minutes ago      1.22 MB

<none>              <none>              26795fdb6ee8        18 minutes ago      1.22 MB

docker.io/tomcat    latest              4e7840b49fad        6 days ago          529 MB

docker.io/nginx     latest              a1523e859360        6 days ago          127 MB

docker.io/python    3.5                 0320ef7199ca        6 days ago          909 MB

docker.io/mysql     latest              c8ad2be69a22        6 days ago          465 MB

docker.io/php       latest              e66ae809d99a        6 days ago          405 MB

docker.io/httpd     latest              c5a012f9cf45        7 days ago          165 MB

docker.io/mongo     latest              bcef5fd2979d        11 days ago         386 MB

docker.io/ubuntu    latest              72300a873c2c        11 days ago         64.2 MB

docker.io/centos    latest              470671670cac        6 weeks ago         237 MB

docker.io/busybox   latest              6d5fcfe5ff17        2 months ago        1.22 MB

#删除所有无名称的镜像

[root@docker overlay2]# docker rmi $(docker images -f "dangling=true" -q)

#查看镜像历使

[root@docker overlay2]# docker image history centos

IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT

470671670cac        6 weeks ago         /bin/sh -c #(nop)  CMD ["/bin/bash"]            0 B                 

<missing>           6 weeks ago         /bin/sh -c #(nop)  LABEL org.label-schema....   0 B                 

<missing>           7 weeks ago         /bin/sh -c #(nop) ADD file:aa54047c80ba300...   237 MB    

#显示镜像详细信息

[root@docker /]# docker image inspect nginx

......

[root@docker /]# docker image pull nginx:1.11

......

#删除指定镜像

[root@docker /]# docker image rm nginx:1.12

Untagged: nginx:1.12

Untagged: docker.io/nginx@sha256:72daaf46f11cc753c4eab981cbf869919bd1fee3d2170a2adeac12400f494728

Deleted: sha256:19f98a1ae65cc06a1f35e86ff4a7894c7f8fab2313a35503166233d470ff3752

Deleted: sha256:d626a8ad97a1f9c1f2c4db3814751ada64f60aed927764a3f994fcd88363b659

#对引用镜像做个标记

[root@docker /]# docker tag nginx:1.11 nginx:v1

[root@docker /]# docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

docker.io/nginx     1.11                5766334bdaa0        2 years ago         183 MB

nginx               v1                  5766334bdaa0        2 years ago         183 MB

#保存镜像文件

[root@docker /]# docker image save nginx:1.11 > nginx1.11.tar

[root@docker /]# du -sh nginx1.11.tar 

182M    nginx1.11.tar

#加载镜像文件

[root@docker /]# docker load <nginx1.11.tar 

Loaded image: nginx:1.11

#导出容器文件

[root@docker /]# docker export 3c28790c0a41 > sky9899.tar

[root@docker /]# du -sh sky9899.tar

1.4M    sky9899.tar

#导入容器文件

[root@docker /]# docker image import sky9899.tar sky9899:self

sha256:1302c27299d6326c256baeca85504fabb30b92abd480c234284fc567458fcac7

[root@docker /]# docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

sky9899             self                1302c27299d6        4 seconds ago       1.22 MB

3.容器常用操作命令

#运行容器,如果不存在,默认会下载

[root@docker sky9890]# docker container run  -itd --name bs busybox

Unable to find image 'busybox:latest' locally

Trying to pull repository docker.io/library/busybox ... 

latest: Pulling from docker.io/library/busybox

bdbbaa22dec6: Pull complete 

Digest: sha256:6915be4043561d64e0ab0f8f098dc2ac48e077fe23f488ac24b665166898115a

Status: Downloaded newer image for docker.io/busybox:latest

3c28790c0a4187063324aafed93caf6d5589d17c9b458001c7b6232205a97907

#查看在使用的容器

[root@docker sky9890]# docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

3c28790c0a41        busybox             "sh"                12 seconds ago      Up 10 seconds                           bs

#执行bs容器

[root@docker sky9890]# docker container attach bs

/ # ls

bin   dev   etc   home  proc  root  run   sys   tmp   usr   var

/ # ls

bin   dev   etc   home  proc  root  run   sys   tmp   usr   var

/ # ps -ef

PID   USER     TIME  COMMAND

    1 root      0:00 sh

    8 root      0:00 ps -ef

/ # ifconfig

eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:02  

          inet addr:172.17.0.2  Bcast:0.0.0.0  Mask:255.255.0.0

          inet6 addr: fe80::42:acff:fe11:2/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:16 errors:0 dropped:0 overruns:0 frame:0

          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:0 

          RX bytes:1296 (1.2 KiB)  TX bytes:648 (648.0 B)

lo        Link encap:Local Loopback  

          inet addr:127.0.0.1  Mask:255.0.0.0

          inet6 addr: ::1/128 Scope:Host

          UP LOOPBACK RUNNING  MTU:65536  Metric:1

          RX packets:0 errors:0 dropped:0 overruns:0 frame:0

          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000 

          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

/ #exit #退出后,容器即停止了

[root@docker sky9890]# docker container start bs

bs

#执行容器bs

[root@docker sky9890]# docker container attach bs

/ # exit #退出后,容器容在运行

[root@docker sky9890]# docker container run -itd -e a=123 --name bs1 busybox

b14e43e4cbc3924af1f8425edc2cce43bf8682e1f7b3436f06bfa02cb5db0071

[root@docker sky9890]# docker exec -it bs1 sh

/ # ls

bin   dev   etc   home  proc  root  run   sys   tmp   usr   var

/ # echo $a

123

/ # exit 

#指定容器端口

[root@docker sky9890]# docker container run -itd -p 8080:80 --name nginx01 nginx

2b6992269e6b9716c101d6cd8f11462b9bb05facbd7bae2b0b656baed2ff027d

[root@docker sky9890]# docker ps

CONTAINER ID        IMAGE               COMMAND                  CREATED                STATUS                 PORTS                        NAMES

2b6992269e6b        nginx               "nginx -g 'daemon ..."   43 seconds ago      Up 41 seconds       0.0.0.0:8080->80/tcp    nginx01

b14e43e4cbc3        busybox             "sh"                     4 minutes ago       Up 4 minutes  

#获取nginx01容器日志

[root@docker sky9890]# docker logs nginx01

192.168.153.1 - - [04/Mar/2020:07:25:14 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) 

like Gecko" "-"

2020/03/04 07:25:15 [error] 6#6: *3 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 

192.168.153.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "192.168.153.141:8080"

192.168.153.1 - - [04/Mar/2020:07:25:15 +0000] "GET /favicon.ico HTTP/1.1" 404 555 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 

6.0; Trident/4.0)" "-"

[root@docker sky9890]# ls /var/lib/docker/containers/

#限制CPU和内存资源

[root@docker sky9890]# docker container run -itd --cpus 1 --memory 512m --name nginx02 nginx

b66722038a14775cb47b9d4f954c27373433cf89a6e0a544630903d90aba1a08

#容器资源使用统计

[root@docker sky9890]# docker container stats nginx02

CONTAINER           CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS

nginx02             0.00%               1.375 MiB / 512 MiB   0.27%               648 B / 648 B       0 B / 0 B           2

#列出容器

[root@docker sky9890]# docker container ls

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES

b66722038a14        nginx               "nginx -g 'daemon ..."   8 minutes ago       Up 8 minutes        80/tcp                nginx02

2b6992269e6b        nginx               "nginx -g 'daemon ..."   23 minutes ago      Up 23 minutes       0.0.0.0:8080->80/tcp   nginx01

b14e43e4cbc3        busybox             "sh"                     27 minutes ago      Up 27 minutes                              bs1

#显示容器详细信息

[root@docker sky9890]# docker container inspect b66722038a14

[root@docker sky9890]# docker exec -it nginx01 bash

root@2b6992269e6b:/# 

[root@docker sky9890]# docker commit bs1  busybox:v2

sha256:6e9545b1e2a2254243ef2599bce5337aa5f67d57cef1d4aa7aa1622e3f1a4921

[root@docker sky9890]# docker images

REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE

busybox             v2                  6e9545b1e2a2        8 seconds ago        1.22 MB

docker.io/mongo     latest              bcef5fd2979d        11 days ago          386 MB

docker.io/ubuntu    latest              72300a873c2c        11 days ago          64.2 MB

docker.io/centos    latest              470671670cac        6 weeks ago          237 MB

docker.io/busybox   latest              6d5fcfe5ff17        2 months ago         1.22 MB

#拷贝文件到bs1容器中

[root@docker /]# docker container cp sky9899.zip  bs1:/root

[root@docker /]# docker container exec bs1 ls /root

sky9899.zip

#重启容器

[root@docker /]# docker restart bs1

bs1

[root@docker /]# docker container exec bs1 ls /root

sky9899.zip

#查看容器日志

[root@docker /]# docker logs nginx01

[root@docker /]# docker port nginx01

80/tcp -> 0.0.0.0:8080

[root@docker /]# docker stats nginx02

#启动容器

[root@docker /]# docker start b66722038a14

#停止容器

[root@docker /]# docker stop  b66722038a14

#删除容器

[root@docker /]# docker rm b66722038a14