docker镜像与命令

目录

1.1 docker 镜像 

1.2 docker 命令

1.1 docker镜像

1. 什么是docker镜像?

  docker镜像不包含Linux内核而有精简的Linux操作系统

    •   大白话

    •   我么安装操作系统ISO就可以理解为用C语言写的安装包(例如,微信安装包)

    •   我们安装操作系统就好像我们安装微信一样

    •   docker镜像也像ISO安装包,但是因为操作系统已将安装Linux内核,所以安装包可以直接使用

           ( 这个安装包只有Linux文件系统,而内核直接使用Linux系统本身就行)

  docker 镜像是docker容器的静态视角,docker容器是docker镜像的运行状态

    •   程序和进程的区别

    •   docker镜像--->程序(存储在硬盘里的代码)

    •   进程-----> 把我们硬盘里的代码加载到内存运行

  容器是docker镜像的引用,如何docker镜像删除,次镜像创建的容器也会失效

2.容器读写层(本质)

  1. 容器其实是在镜像的最上面加了一层读写层,在运行容器里文件改动时,会先从镜像里要写的文件复制到容器自己的文件系统中(读写层)。

  2. 如果容器删除了,最上面的读写层也就删除了,改动也就丢失了

  3. 所以无论多少个容器共享一个镜像,所做的写操作都是从镜像的文件系统中复制过来操作的,并不会修改镜像的源文件

  4. 若想持久化这些改动,可以通过docker commit 将容器保存成一个新镜像

  

 

   

 

   

3.查看docker容器的工作目录

 1 [root@linux-node4 diff]# docker run -itd --name=web1 -p 192.168.56.14:81:80 nginx:latest
 2 [root@linux-node4 diff]# docker inspect web1
 3 [
 4     {
 5         # 存储驱动
 6         "GraphDriver": {
 7             "Data": {
 8                 "LowerDir": "/var/lib/docker/overlay2/51692869029f819494bb402dc70aa2869b8d1848c3b65c549a010a260e44cc13-init/diff:/var/lib/docker/overlay2/09fa1314e484781dfc1fb25a6cf5df2502fe35dea9025a373a3cb0202732ccce/diff:/var/lib/docker/overlay2/162ec5c9be56e5d718011c09ed087eda04b755e1a68bd1953c60f175e6635e68/diff:/var/lib/docker/overlay2/7c1b27ff59a397ae7d6bd106db579e90476f57bb1ecef9fcb1a6f1ad5ce43b7c/diff",
 9                 "MergedDir": "/var/lib/docker/overlay2/51692869029f819494bb402dc70aa2869b8d1848c3b65c549a010a260e44cc13/merged",
10                 "UpperDir": "/var/lib/docker/overlay2/51692869029f819494bb402dc70aa2869b8d1848c3b65c549a010a260e44cc13/diff",
11                 "WorkDir": "/var/lib/docker/overlay2/51692869029f819494bb402dc70aa2869b8d1848c3b65c549a010a260e44cc13/work"
12             },
13             "Name": "overlay2"
14         },
15         "NetworkSettings": {
16             "Ports": {
17                 "80/tcp": [
18                     {
19                         "HostIp": "192.168.56.14",
20                         "HostPort": "81"
21                     }
22                 ]
23             },
24             "MacAddress": "02:42:ac:11:00:02",
25             "Networks": {
26                 "bridge": {
27                     "Gateway": "172.17.0.1",
28                     "IPAddress": "172.17.0.2",
29                     "IPPrefixLen": 16,
30                 }
31             }
32         }
33     }
34 ]
35 [root@linux-node4 diff]# cd /var/lib/docker/overlay2/51692869029f819494bb402dc70aa2869b8d1848c3b65c549a010a260e44cc13
36 [root@linux-node4 51692869029f819494bb402dc70aa2869b8d1848c3b65c549a010a260e44cc13]# ll    # 查看docker工作目录都哪些内容
37 diff  link  lower  merged  work
38 diff      # 读写层的差异(在读写层做的操作由这个容器单独管理)
39 merged    # 引用docker进行中的文件系统
40 work      # 项目工作目录
View Code

1.2 常用命令

1. docker 普通命令

 1 docker ps                 # 仅列出当前运行的容器
 2 docker ps -l              # 列出最新创建得容器
 3 docker ps -a              # 列出素有容器(包括 未运行的)
 4 docker inspect web4       # 列出指定容器的详细信息
 5 
 6 #### 持久化容器
 7 
 8 docker exec -it web4 bash                     # 进入容器web4中
 9 touch 1.txt 2.txt                             # 对容器进行修改
10 docker commit web4 nginx:web4                 # 将修改后的web4容器提交为一个新镜像 nginx:web4
11 docker images                                 # 可以看到 多了一个 TAG标记为 web4 的镜像
12 docker run -d --name web4-1 nginx:web4        # 使用刚刚提交的镜像web4创建一个容器web4-1
13 docker exec -it web4-1 bash                   # 进入web4-1的bash环境
14 
15 #### 从宿主机复制文件到docker容器
16 docker cp nginx.tar web4-1:/home              # 将宿主机nginx.tar文件拷贝到容器web4-1的/home目录中
17 docker exec -it web4-1 ls /home               # 在容器web4-1中执行 "ls /home" 命令
18 
19 #### 容器常用查询命令
20 docker logs web4-1                            # 查看web4-1中控制台日志
21 docker port 55f870061ed9                      # 查看指定容器端口映射
22 docker top 00f7ddc96622                       # 查看容器中有哪些进程
23 docker stats 00f7ddc96622                     # 查看容器资源使用情况
24 
25 ##### 启动、停止、删除 容器
26 docker ps -a                                  # 列出素有容器(包括 未运行的)
27 docker start web                              # 启动容器web      
28 docker stop web                               # 停止容器web
29 docker rm web                                 # 删除容器web

2. 镜像常用命令

1 [root@linux-node4 diff]# docker help                           # 查看docker帮助
2 [root@linux-node4 diff]# docker image --help                   # 查看 docker中 镜像相关帮助
3 [root@linux-node4 diff]# docker image ls                       # 查看当前所有镜像
4 [root@linux-node4 diff]# docker image inspect nginx            # 查看指定镜像(nginx镜像)详细信息
5 [root@linux-node4 diff]# docker pull nginx:1.14                # 下载指定版本镜像 nginx
6 [root@linux-node4 diff]# docker image rm nginx:1.14            # 删除nginx 1.14版本
7 [root@linux-node4 diff]# docker image save nginx > nginx.tar   # 导出niginx镜像
1 -d   # 后台运行容器,并返回容器ID;
2 -i   # 以交互模式运行容器,通常与 -t 同时使用;
3 -t   # 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
4 -P   # 随机端口映射,容器内部端口随机映射到主机的高端口
5 -p   # 指定端口映射,格式为:主机(宿主)端口:容器端口
6 --name="nginx-lb"   # 为容器指定一个名称;
7 --dns 8.8.8.8       # 指定容器使用的DNS服务器,默认和宿主一致;
8 
9 docker run 常用参数
docker run 常用参数
 1 --dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
 2 
 3 -h "mars": 指定容器的hostname;
 4 
 5 -e username="ritchie": 设置环境变量;
 6 
 7 --env-file=[]: 从指定文件读入环境变量;
 8 
 9 --cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
10 
11 -m :设置容器使用内存最大值;
12 
13 --net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
14 
15 --link=[]: 添加链接到另一个容器;
16 
17 --expose=[]: 开放一个端口或一组端口;
18 
19 --volume , -v:    绑定一个卷
20 
21 -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
22 
23 docker run其他参数
docker run 其他参数

3. 运行容器常用命令

[root@linux-node4 ]# docker run --help                              # 查看创建容器帮助
[root@linux-node4 ]# docker run -it centos                          # 创建centos镜像并进入终端
[root@linux-node4 ]# docker run -d nginx                            # 后台启动nginx容器
[root@linux-node4 ]# docker stop 6bb09dce461f                       # 关闭一个容器
[root@linux-node4 ]# docker ps -l                                         # 查看最近运行的容器
[root@linux-node4 ]# docker run -itd centos                         # 启用一个伪终端守护centos容器
[root@linux-node4 ]# docker container run -d --name web3 -e test=123456 -p 8800:80 -h webhostname --restart always nginx
-d                   # 后台启动nginx容器
--name web3          # 自定义容器名字(默认会是一段随机字符串)
-e test=123456       # 启动容器添加变量 test=123456 (echo $test)
-p 8800:80           # 宿主机的8800端口映射到docker容器的80端口中
-h webhostname       # docker容器主机名 (a300f394af88)
--restart always     # 宿主机重启自动拉起这个docker容器
nginx                # 使用这个nginx镜像启动容器
注:http://192.168.56.12:8800/     访问这个docker  nginx
[root@linux-node4 ]# docker logs web                                 # 查看上面启动的web容器的日志
[root@linux-node4 ]# docker exec -it web bash                        # 进入容器web

 

 1 [root@linux-node1 /]# docker run -itd nginx          # 在后台启动一个docker容器
 2 [root@linux-node1 /]# docker inspect 5a3ad030a621    # 查看docker运行容器的详细信息
 3 [root@linux-node1 /]# curl http://172.17.0.2         # 
 4 [root@linux-node1 /]# docker run -itd --name=web2 -p 192.168.56.11:8800:80 nginx
 5 使用--itd参数(指定后台启动这个容器),--name=web2(指定这个web容器的名字叫web2) 
 6 
 7         
 8 -d:   后台运行容器,并返回容器ID;
 9 -i:   以交互模式运行容器,通常与 -t 同时使用;
10 -t:   为容器重新分配一个伪输入终端,通常与 -i 同时使用;
11 -P:   随机端口映射,容器内部端口随机映射到主机的高端口
12 -p:   指定端口映射,格式为:主机(宿主)端口:容器端口
13 --name="nginx-lb":   为容器指定一个名称
14 --dns 8.8.8.8:   指定容器使用的DNS服务器,默认和宿主一致;
15 [root@linux-node1 /]# docker exec -it c9b7a480ee68 bash    # 进入docker环境

 停止运行容器,删除运行容器,删除镜像

# 停止容器运行(CONTAINER ID)
docker stop 容器ID 

# 删除 容器(CONTAINER ID)
docker rm 容器ID

# 删除 镜像(IMAGE ID)
docker images 镜像ID

 

posted @ 2020-03-31 21:32  Mr-刘  阅读(2750)  评论(0编辑  收藏  举报