【长篇博文】Docker学习笔记(四):镜像的分层、打包、双向绑定、导入导出、Dockerfile的构建、部署与发布

这里推荐B站狂神的教学视频,视频的地址附录在文章末尾,个人觉得还是讲得不错的。以下的一些学习记录参看了该视频,希望对大家有帮助。

一、镜像分层的理解

在这里插入图片描述
例如下载一层一层的:
在这里插入图片描述

1.0、联合文件

以前下载过的可不再下载,共用就行,极大节省了空间。
在这里插入图片描述

1.1、加载镜像

如何进行加载镜像?
在这里插入图片描述
加载引导类似我们ubuntu里面的boot,无论什么镜像,bootfs都是共用的
在这里插入图片描述
例如启动后,root文件下进行一个容器作为小的虚拟机。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.2、分层拉取镜像

可以发现,已有的层就不在重复拉取,因此显示存在(already exists)
在这里插入图片描述
我们可以通过前面说的inspect查询镜像信息,然后来查看层layers
在这里插入图片描述
创建新的层会在层的基础上继续添加就可以。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.3、案例分析:tomcat

在这里插入图片描述
在这里插入图片描述

二、提交自己的镜像

如何提交自己的镜像?

2.1、提交自己的镜像

在这里插入图片描述

docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[TAG]

2.2、实战测试

运行tomcat 镜像 :又看到熟悉的猫,docker安装运行完成:

 docker run -it --rm -p 8989:8080 tomcat

具体看下面的命令解释

root@ovo:/home/zkpark# docker ps
CONTAINER ID   IMAGE            COMMAND                  CREATED          STATUS                              PORTS                              NAMES
b9fa71eb085d   tomcat           "catalina.sh run"        58 seconds ago   Up 57 seconds                       8080/tcp, 0.0.0.0:8989->8989/tcp   vigilant_beaver
87e59469fb99   rancher/server   "/usr/bin/entry /usr…"   21 hours ago     Up 14 hours                         3306/tcp, 0.0.0.0:9090->8080/tcp   rancher-zk
964fd0b86e14   e02481bb39c8     "entrypoint.sh"          23 hours ago     Restarting (1) About a minute ago                                      blissful_mclean
#运行tomcat容器
root@ovo:/home/zkpark# docker exec -it b9fa71eb085d /bin/bash
root@b9fa71eb085d:/usr/local/tomcat# cd webapps
#目前没有任何东西,所以要从webapps.dist拷贝
root@b9fa71eb085d:/usr/local/tomcat/webapps# ls
root@b9fa71eb085d:/usr/local/tomcat/webapps# cd ..
#拷贝
root@b9fa71eb085d:/usr/local/tomcat# cp -r webapps.dist/* webapps
root@b9fa71eb085d:/usr/local/tomcat# ls
BUILDING.txt  CONTRIBUTING.md  LICENSE  NOTICE  README.md  RELEASE-NOTES  RUNNING.txt  bin  conf  lib  logs  native-jni-lib  temp  webapps  webapps.dist  work
#进入webapps查看是否拷贝成功
root@b9fa71eb085d:/usr/local/tomcat# cd webapps
root@b9fa71eb085d:/usr/local/tomcat/webapps# ls
ROOT  docs  examples  host-manager  manager
root@b9fa71eb085d:/usr/local/tomcat/webapps# cd 
root@b9fa71eb085d:~# exit
exit
#查看当前tomcat进程
root@ovo:/home/zkpark# docker ps
CONTAINER ID   IMAGE            COMMAND                  CREATED         STATUS                          PORTS                              NAMES
b9fa71eb085d   tomcat           "catalina.sh run"        6 minutes ago   Up 6 minutes                    8080/tcp, 0.0.0.0:8989->8989/tcp   vigilant_beaver
87e59469fb99   rancher/server   "/usr/bin/entry /usr…"   21 hours ago    Up 14 hours                     3306/tcp, 0.0.0.0:9090->8080/tcp   rancher-zk
964fd0b86e14   e02481bb39c8     "entrypoint.sh"          23 hours ago    Restarting (1) 43 seconds ago  

提交新的tomcat:

docker commit -a"zk" -m="add webapps app" 606e2ead236d tomcat_2021:zk1.0

可以发现刚刚新建提交的tomcat_2021镜像
在这里插入图片描述
在这里插入图片描述

三、容器数据卷

3.0、问题描述与需求分析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.1、双向绑定指定目录流程

挂载到主机与docker容器内的相同目录,事实上就是一种双向绑定的操作。
在这里插入图片描述
在这里插入图片描述

3.2、双向绑定实战测试

3.2.1、挂载流程

首先主机cd到 home该目录下:

root@ovo:/home/zkpark# cd /home
root@ovo:/home# ls
lost+found  ovo.py  zkpark  zkpy

然后开始进行绑定操作:这个命令执行后直接进入了centos镜像的容器下:

docker run -it -v /home/ceshi:/home centos

ls查看当前目录文件

root@ovo:/home# docker run -it -v /home/ceshi:/home centos /bin/bash
[root@508e05fae9c2 /]# ls 
bin  etc   lib    lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr

进入该容器的home目录,让它与ubuntu主机下的home保持一样。可以发现。当前目录下没有任何文件:

[root@508e05fae9c2 /]# cd /home
[root@508e05fae9c2 home]# ls
[root@508e05fae9c2 home]# 

下面我们来docker inspect 508e05fae9c2查看一下该容器的挂载信息,挂载的内容在mounts下,记得另起一个终端,在root下查看:

root@ovo:/home/zkpark# docker inspect 508e05fae9c2

找到mounts,如下图所示,说明挂载成功!
在这里插入图片描述

3.2.1、绑定:从centos生成的文件同步到主机ubuntu的文件

下面在容器的home下创建一个文件,并查看:

[root@508e05fae9c2 home]# touch sinxzy.py
[root@508e05fae9c2 home]# ls
sinxzy.py

接下来去我们的主机的home的ceshi目录下查看是不是有该文件的生成:

root@ovo:/home# ls
ceshi  lost+found  ovo.py  zkpark  zkpy
root@ovo:/home# cd ceshi
root@ovo:/home/ceshi# ls
root@ovo:/home/ceshi# ls
sinxzy.py

可以发现,刚刚在容器中创建的py文件同样在ubuntu主机目录/home/ceshi下生成。

测试成功!

3.2.1、绑定:反之

这里先将centos容器停掉:exit或stop都可以,可以发现没有了。

注意:如果你没有python,那就先拉一下python3.7:
docker pull python:3.7
以下用.py文件进行测试并运行。

[root@508e05fae9c2 home]# exit
exit
root@ovo:/home# docker ps
CONTAINER ID   IMAGE            COMMAND                  CREATED        STATUS                         PORTS                              NAMES
87e59469fb99   rancher/server   "/usr/bin/entry /usr…"   25 hours ago   Up 17 hours                    3306/tcp, 0.0.0.0:9090->8080/tcp   rancher-zk
964fd0b86e14   e02481bb39c8     "entrypoint.sh"          26 hours ago   Restarting (1) 2 seconds ago                                      blissful_mclean

下面在ubuntu主机home/ceshi目录下创建test.y文件

root@ovo:/home/ceshi# vim test.py
root@ovo:/home/ceshi# ls
sinxzy.py  test.py

编写内容:
在这里插入图片描述
先来测试一下py文件

#vim生成py文件
root@ovo:/home/ceshi# vim test.py
root@ovo:/home/ceshi# ls
sinxzy.py  test.py
# cat查看test.py文件目录
root@ovo:/home/ceshi# cat test.py
print("helloworld!!!!")
#运行py
root@ovo:/home/ceshi# python test.py
helloworld!!!!
root@ovo:/home/ceshi# 

退出保存该文件之后,在另一终端再次启动刚刚的centos容器,并且进入到该容器内部:

root@ovo:/home# docker start 508e05fae9c2
508e05fae9c2
root@ovo:/home# docker attach 508e05fae9c2
[root@508e05fae9c2 /]# 

查看容器内是否有我们主机ubuntu生成的py文件:

[root@508e05fae9c2 home]# ls      
sinxzy.py  test.py
[root@508e05fae9c2 home]# cat test.py
print("helloworld!!!!")

测试成功!
在这里插入图片描述

3.3、具名和匿名挂载

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
实战测试:

#匿名挂载
root@ovo:/home/zkpark# docker run -d -P --name nginxo1 -v /etc/nginx nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
45b42c59be33: Already exists 
d0d9e9ea897e: Pull complete 
66e650438339: Pull complete 
76a3dfe4406b: Pull complete 
410ff9d97480: Pull complete 
Digest: sha256:8e10956422503824ebb599f37c26a90fe70541942687f70bbdb744530fc9eba4
Status: Downloaded newer image for nginx:latest
85d45164923481993fa6573e92f43d200297eebb59cbc43c930e8b836b3998f9

#查看卷帮助
root@ovo:/home/zkpark# docker volume --help

Usage:  docker volume COMMAND

Manage volumes

Commands:
  create      Create a volume
  inspect     Display detailed information on one or more volumes
  ls          List volumes
  prune       Remove all unused local volumes
  rm          Remove one or more volumes

Run 'docker volume COMMAND --help' for more information on a command.

#查看容器卷
root@ovo:/home/zkpark# cd /home
root@ovo:/home# docker volume ls
DRIVER    VOLUME NAME
local     4a1c234fa82076b83d5e4a0bfa45992f6172331b0acd40c9e2543c4e24bfcd1e
...
local     
5d57a873e575368e452a1fcfea9ffb5227eefaa0782f5097b11c5eb251755a4f
local     8e9f3eeba7a8c7e5a3ac24105f2be9dd30d0d4d599920827c6c1fc9019da5c55
#具名挂载    
root@ovo:/home# ls
ceshi  lost+found  ovo.py  zkpark  zkpy
root@ovo:/home# docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx
dfa75db144ed24b13bafeabacc0dceac35ebeb5d79f3caa07f64979198124278
#再次查看卷,出现刚刚的具名
root@ovo:/home# docker volume ls
DRIVER    VOLUME NAME
local     4a1c234fa82076b83d5e4a0bfa45992f6172331b0acd40c9e2543c4e24bfcd1e
...
local     fda6e9fc04e53effda927f4b75867f0d5d88aee6b9604ed9e7857ad6d941bc00
local     juming-nginx

#查看具名挂载信息可以知道挂载的指定目录
root@ovo:/home# docker volume inspect juming-nginx
[
    {
    
    
        "CreatedAt": "2021-02-17T18:59:31+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/juming-nginx/_data",
        "Name": "juming-nginx",
        "Options": null,
        "Scope": "local"
    }
]
#看看挂载卷信息
root@ovo:/home# cd /var/lib/docker
root@ovo:/var/lib/docker# ls
buildkit  containers  image  network  overlay2  plugins  runtimes  swarm  tmp  trust  volumes
root@ovo:/var/lib/docker# cd volumes

#与上述docker volume ls查看的结果一致
root@ovo:/var/lib/docker/volumes# ls
062365c8669bbe6f55fd706b3b3b1e767c843e27ae066bae8e107372ab9bec02
.....
fda6e9fc04e53effda927f4b75867f0d5d88aee6b9604ed9e7857ad6d941bc00
juming-nginx
metadata.db

#查看具名数据
root@ovo:/var/lib/docker/volumes# cd juming-nginx
root@ovo:/var/lib/docker/volumes/juming-nginx# ls
_data
root@ovo:/var/lib/docker/volumes/juming-nginx# cd _data
root@ovo:/var/lib/docker/volumes/juming-nginx/_data# ls
conf.d  fastcgi_params  koi-utf  koi-win  mime.types  modules  nginx.conf  scgi_params  uwsgi_params  win-utf

#查看具名配置文件.conf
root@ovo:/var/lib/docker/volumes/juming-nginx/_data# cat nginx.conf

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    
    
    worker_connections  1024;
}


http {
    
    
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

四、Dockerfile构建镜像

4.0、初始Dockerfile

在这里插入图片描述
构建镜像命令:

docker build -f /home/docker-test-volume/dockerfile1 -t zkang/centos:1.0 .

下面开始测试:为构建镜像编辑dockerfile1文件

root@ovo:/home# mkdir docker-test-volume
root@ovo:/home# cd docker-test-volume/
root@ovo:/home/docker-test-volume# pwd
/home/docker-test-volume
root@ovo:/home/docker-test-volume# vim dockerfile1

内容如下:
在这里插入图片描述
开始构建镜像:

root@ovo:/home/docker-test-volume# docker build -f /home/docker-test-volume/dockerfile1 -t zkang/centos:1.0 .
Sending build context to Docker daemon  2.048kB
Step 1/4 : FROM centos
 ---> 300e315adb2f
Step 2/4 : VOLUME ["volume01","volume02"]
 ---> Running in 39d9337d47d3
Removing intermediate container 39d9337d47d3
 ---> 9a376911dbe8
Step 3/4 : CMD echo "----end----"
 ---> Running in 0f8efc81d3ab
Removing intermediate container 0f8efc81d3ab
 ---> fd3540783461
Step 4/4 : CMD /bin/bash
 ---> Running in d01f156f514f
Removing intermediate container d01f156f514f
 ---> fe9f6e6d328c
Successfully built fe9f6e6d328c
Successfully tagged zkang/centos:1.0

查看我们创建的镜像

root@ovo:/home/docker-test-volume# docker images

在这里插入图片描述
验证我们创建的镜像是否有问题?
首先运行我们的zkang/centos镜像、查看目录

#查看刚刚创建的镜像名字id
root@ovo:/home/docker-test-volume# docker images
REPOSITORY                                                       TAG                      IMAGE ID       CREATED         SIZE
zkang/centos                                                     1.0                      fe9f6e6d328c   8 minutes ago   209MB
tomcat_2021                                                      zk1.0                    510b23d401fb   6 hours ago     667MB
ultralytics/yolov3                                               latest                   5a831834fc3e   11 hours ago    14.5GB
python                                                           3.7                      9c9ca311176f   16 hours ago    877MB
tomcat                                                           latest                   bf4709e77b18   7 days ago      667MB

#运行我们的镜像
root@ovo:/home/docker-test-volume# docker run -it fe9f6e6d328c /bin/bash

#查看我们的镜像目录
[root@14b1bc4c1003 /]# ls -l
total 56
lrwxrwxrwx   1 root root    7 Nov  3 15:22 bin -> usr/bin
drwxr-xr-x   5 root root  360 Feb 17 11:44 dev
drwxr-xr-x   1 root root 4096 Feb 17 11:44 etc
drwxr-xr-x   2 root root 4096 Nov  3 15:22 home
lrwxrwxrwx   1 root root    7 Nov  3 15:22 lib -> usr/lib
lrwxrwxrwx   1 root root    9 Nov  3 15:22 lib64 -> usr/lib64
drwx------   2 root root 4096 Dec  4 17:37 lost+found
drwxr-xr-x   2 root root 4096 Nov  3 15:22 media
drwxr-xr-x   2 root root 4096 Nov  3 15:22 mnt
drwxr-xr-x   2 root root 4096 Nov  3 15:22 opt
dr-xr-xr-x 285 root root    0 Feb 17 11:44 proc
dr-xr-x---   2 root root 4096 Dec  4 17:37 root
drwxr-xr-x  11 root root 4096 Dec  4 17:37 run
lrwxrwxrwx   1 root root    8 Nov  3 15:22 sbin -> usr/sbin
drwxr-xr-x   2 root root 4096 Nov  3 15:22 srv
dr-xr-xr-x  13 root root    0 Feb 17 11:44 sys
drwxrwxrwt   7 root root 4096 Dec  4 17:37 tmp
drwxr-xr-x  12 root root 4096 Dec  4 17:37 usr
drwxr-xr-x  20 root root 4096 Dec  4 17:37 var
drwxr-xr-x   2 root root 4096 Feb 17 11:44 volume01
drwxr-xr-x   2 root root 4096 Feb 17 11:44 volume02

在这里插入图片描述
查看自动挂载的匿名挂载volume01:

#进入创建的容器
root@ovo:/home/docker-test-volume# cd
root@ovo:~# docker run -it fe9f6e6d328c /bin/bash
[root@682bd4a36e56 /]# ls
bin  etc   lib    lost+found  mnt  proc  run   srv  tmp  var       volume02
dev  home  lib64  media       opt  root  sbin  sys  usr  volume01
#创建验证同步的文件container.txt
[root@682bd4a36e56 /]# cd volume01
[root@682bd4a36e56 volume01]# touch container.txt

#当前位置container.txt是在容器内
[root@682bd4a36e56 volume01]# ls
container.txt

下面在主机外面,也就是容器外面查看是否同步有

root@ovo:/home/zkpark# docker ps
CONTAINER ID   IMAGE            COMMAND                  CREATED             STATUS                         PORTS                              NAMES
682bd4a36e56   fe9f6e6d328c     "/bin/bash"              2 minutes ago       Up 2 minutes                                                      jovial_elbakyan
dfa75db144ed   nginx            "/docker-entrypoint.…"   About an hour ago   Up About an hour               0.0.0.0:49154->80/tcp              nginx02

查看刚刚的容器信息

root@ovo:/home/zkpark# docker inspect 682bd4a36e56 

发现有了挂载的卷:
在这里插入图片描述
进入卷vulume挂载路径:发现已经有了container.txt,同步测试成功!

root@ovo:/home/zkpark# cd /var/lib/docker/volumes/80920528ecba3d51466e7ddcb110e1c739f1063b4e2308fde9f1cec257557080/_data
root@ovo:/var/lib/docker/volumes/80920528ecba3d51466e7ddcb110e1c739f1063b4e2308fde9f1cec257557080/_data# ls
container.txt

在这里插入图片描述

4.1、数据卷容器:多个容器之间进行同步

多个centos同步:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

docker01:在docker0的卷volume01中创建文件docker_AB01

docker run -it --name docker01 zkang/centos:1.0

测试:

root@ovo:~# docker run -it --name docker01 zkang/centos:1.0
[root@4e70f7b94ed7 /]# ls -l
total 56
lrwxrwxrwx   1 root root    7 Nov  3 15:22 bin -> usr/bin
drwxr-xr-x   5 root root  360 Feb 17 12:23 dev
drwxr-xr-x   1 root root 4096 Feb 17 12:23 etc
drwxr-xr-x   2 root root 4096 Nov  3 15:22 home
lrwxrwxrwx   1 root root    7 Nov  3 15:22 lib -> usr/lib
lrwxrwxrwx   1 root root    9 Nov  3 15:22 lib64 -> usr/lib64
drwx------   2 root root 4096 Dec  4 17:37 lost+found
drwxr-xr-x   2 root root 4096 Nov  3 15:22 media
drwxr-xr-x   2 root root 4096 Nov  3 15:22 mnt
drwxr-xr-x   2 root root 4096 Nov  3 15:22 opt
dr-xr-xr-x 322 root root    0 Feb 17 12:23 proc
dr-xr-x---   2 root root 4096 Dec  4 17:37 root
drwxr-xr-x  11 root root 4096 Dec  4 17:37 run
lrwxrwxrwx   1 root root    8 Nov  3 15:22 sbin -> usr/sbin
drwxr-xr-x   2 root root 4096 Nov  3 15:22 srv
dr-xr-xr-x  13 root root    0 Feb 17 11:44 sys
drwxrwxrwt   7 root root 4096 Dec  4 17:37 tmp
drwxr-xr-x  12 root root 4096 Dec  4 17:37 usr
drwxr-xr-x  20 root root 4096 Dec  4 17:37 var
drwxr-xr-x   2 root root 4096 Feb 17 12:23 volume01
drwxr-xr-x   2 root root 4096 Feb 17 12:23 volume02
[root@4e70f7b94ed7 /]# cd volume01   
[root@4e70f7b94ed7 volume01]# ls
[root@4e70f7b94ed7 volume01]# touch docker_AB01
[root@4e70f7b94ed7 volume01]# ls
docker_AB01

docker02:在在docker02的卷volume01中可以看到docker01创建的文件docker_AB01

docker run -it --name docker02 --volumes-from docker01 zkang/centos:1.0

测试:

root@ovo:~# docker run -it --name docker02 --volumes-from docker01 zkang/centos:1.0
[root@7d9d13472154 /]# ls -l
total 56
lrwxrwxrwx   1 root root    7 Nov  3 15:22 bin -> usr/bin
drwxr-xr-x   5 root root  360 Feb 17 12:26 dev
drwxr-xr-x   1 root root 4096 Feb 17 12:26 etc
drwxr-xr-x   2 root root 4096 Nov  3 15:22 home
lrwxrwxrwx   1 root root    7 Nov  3 15:22 lib -> usr/lib
lrwxrwxrwx   1 root root    9 Nov  3 15:22 lib64 -> usr/lib64
drwx------   2 root root 4096 Dec  4 17:37 lost+found
drwxr-xr-x   2 root root 4096 Nov  3 15:22 media
drwxr-xr-x   2 root root 4096 Nov  3 15:22 mnt
drwxr-xr-x   2 root root 4096 Nov  3 15:22 opt
dr-xr-xr-x 303 root root    0 Feb 17 12:26 proc
dr-xr-x---   2 root root 4096 Dec  4 17:37 root
drwxr-xr-x  11 root root 4096 Dec  4 17:37 run
lrwxrwxrwx   1 root root    8 Nov  3 15:22 sbin -> usr/sbin
drwxr-xr-x   2 root root 4096 Nov  3 15:22 srv
dr-xr-xr-x  13 root root    0 Feb 17 11:44 sys
drwxrwxrwt   7 root root 4096 Dec  4 17:37 tmp
drwxr-xr-x  12 root root 4096 Dec  4 17:37 usr
drwxr-xr-x  20 root root 4096 Dec  4 17:37 var
drwxr-xr-x   2 root root 4096 Feb 17 12:23 volume01
drwxr-xr-x   2 root root 4096 Feb 17 12:23 volume02
[root@7d9d13472154 /]# cd volume01
[root@7d9d13472154 volume01]# ls
docker_AB01

类似地,也可以在其他新的位置创建文件,docker01也能看到。

docker03:在docker03的卷volume01中生成文件docker_AB02之后,反过来在docker01中也能查到

docker run -it --name docker03 --volumes-from docker01 zkang/centos:1.0

测试:

root@ovo:/home/zkpark# docker run -it --name docker03 --volumes-from docker01 zkang/centos:1.0
[root@a2260985213d /]# ls -l
total 56
lrwxrwxrwx   1 root root    7 Nov  3 15:22 bin -> usr/bin
drwxr-xr-x   5 root root  360 Feb 17 12:40 dev
drwxr-xr-x   1 root root 4096 Feb 17 12:40 etc
drwxr-xr-x   2 root root 4096 Nov  3 15:22 home
lrwxrwxrwx   1 root root    7 Nov  3 15:22 lib -> usr/lib
lrwxrwxrwx   1 root root    9 Nov  3 15:22 lib64 -> usr/lib64
drwx------   2 root root 4096 Dec  4 17:37 lost+found
drwxr-xr-x   2 root root 4096 Nov  3 15:22 media
drwxr-xr-x   2 root root 4096 Nov  3 15:22 mnt
drwxr-xr-x   2 root root 4096 Nov  3 15:22 opt
dr-xr-xr-x 343 root root    0 Feb 17 12:40 proc
dr-xr-x---   2 root root 4096 Dec  4 17:37 root
drwxr-xr-x  11 root root 4096 Dec  4 17:37 run
lrwxrwxrwx   1 root root    8 Nov  3 15:22 sbin -> usr/sbin
drwxr-xr-x   2 root root 4096 Nov  3 15:22 srv
dr-xr-xr-x  13 root root    0 Feb 17 11:44 sys
drwxrwxrwt   7 root root 4096 Dec  4 17:37 tmp
drwxr-xr-x  12 root root 4096 Dec  4 17:37 usr
drwxr-xr-x  20 root root 4096 Dec  4 17:37 var
drwxr-xr-x   2 root root 4096 Feb 17 12:29 volume01
drwxr-xr-x   2 root root 4096 Feb 17 12:23 volume02
[root@a2260985213d /]# cd volume01
[root@a2260985213d volume01]# touch docker_AB02
[root@a2260985213d volume01]# ls
docker_AB01  docker_AB02

然后我们返回docker01查看是否有以上生成的另一文件docker_AB02。

在这里插入图片描述
查看之后发现也有文件docker_AB02,测试成功!

停掉/删除docker01的文件,原来0203的数据依旧在

删除docker01容器:

root@ovo:/home/zkpark# docker rm -f 4e70f7b94ed7
4e70f7b94ed7
root@ovo:/home/zkpark# 

查看docker02和docker03的数据是否还在:文件依旧在,测试成功!
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.2、Dockerfile

4.2.0、Dockerfile介绍

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.2.1、Dockerfile构建过程

在这里插入图片描述
例如,之前的初始Dockerfile:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.2.2、Dockerfile构建命令

在这里插入图片描述
在这里插入图片描述

4.2.3、实战测试:构建Dockerfile

先看看别人怎么做的?
在这里插入图片描述
官方没有的功能:
在这里插入图片描述
因此需要添加这些功能:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通过命令docker history 镜像id可查别人的镜像是怎么生成的。这样就知道他人的镜像是怎么做的了,便于以后衍生更多的Dockerfile。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
解决的办法:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
实战Dockerfile-tomcat
在这里插入图片描述
在这里插入图片描述

4.2.4、Dockerfile构建tensorflow环境

学以致用!

方法一

第一步:先 docker search ubuntu 查找到ubuntu的镜像。

 docker search ubuntu

第二步: docker pull ubuntu ,完成之后使用 docker images 查看pull下来的镜像,很小只有120M。

 docker images

第三步: docker run -ti -d --name tensorflow ubuntu bash 创建容器。

 docker ps -a

第四步: docker exec -ti tensorflow bash 进入容器。

docker exec -ti tensorflow bash

第五步:就是在内部使用apt 安装软件了,不过在安装软件之前需要先 apt update 下,要不使用apt 就无法安装软件包。

下面直接给出软件的安装命令。这些安装命令都是tensorflow官网上的,如果安装过程中出现啥问题,点这里,然后查找"Installing with native pip",看下官网的文档。还有一点需要注意的就是ubuntu的基础镜像里面没有vim,所以安装的时候也将vim装上。

apt update
apt install -y python3-pip python3-dev vim
pip3 install tensorflow
pip3 install tensorflow-gpu #这个我目前还没有用到,所以我没有安装

安装完成之后,使用下面这块代码测试下:

复制代码

 #!/usr/bin/env python                                                                                                   
 #-*- coding:utf-8 -*- 
 
 import tensorflow as tf
 hello = tf.constant('Hello, TensorFlow!')
 sess = tf.Session()
 print(sess.run(hello))

复制代码
  最后一步:就是将安装好软件的容器,提交到镜像中。使用命令 docker commit tensorflow tensorflow:20170827
docker images

方法二

使用Dockerfile文件构建镜像,这个比较简单,下面直接贴出来Dockerfile文件内容:

# 构建tensorflow 环境
FROM ubuntu

MAINTAINER henrry

# 安装python 和 pip
RUN apt update \        && apt install -y python3-pip python3-dev vim \        && pip3 install --upgrade pip \
        && pip3 install tensorflow \        && pip3 install tensorflow-gpu \        && ln -s /usr/bin/python3 /usr/bin/python \
        && ln -s /usr/bin/pip3 /usr/bin/pip

# 映射端口
EXPOSE 8888# 添加文件
ADD vimrc /root/.vimrc

在这里插入图片描述

4.2.5、发布自己的docker镜像

发布镜像流程介绍:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

解决以上push报错的问题,报错的原因是以前就push过了。
在这里插入图片描述

五、镜像和容器的打包与导入

在这里插入图片描述

未完待续。。。。

参考资料

参考视频:
https://www.bilibili.com/video/BV1og4y1q7M4?p=21&spm_id_from=pageDriver

https://blog.csdn.net/xiaozecheng/category_10013756.html

https://www.cnblogs.com/Walther/p/7440534.html

https://blog.csdn.net/ddddeng_/category_10162590.html

猜你喜欢

转载自blog.csdn.net/weixin_41194129/article/details/113832695
今日推荐