Docker-入门

Docker是基于Linux容器的虚拟化技术,基于go语言开发,生态是非常不错的,通过对应用组件的封装、
分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运
行环境能够做到一次封装,到处运行。
传统虚拟技术需要虚拟出一个系统才能运行,Linux容器只是对进程进行了隔离,使得每个进程看起来都运行在一个单独的系统。不同的容器可以共用相同的库和内核,而且做到互不影响,所以容器本身没有内核,也更轻量级。
Docker的两个核心概念为:容器和镜像。在后续的使用中会逐步了解

一、Docker安装

官方文档:https://docs.docker.com/engine/install/

还是基于CentOS操作系统进行安装

1.安装

安装前先移除,防止有缓存:

yumremove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine

安装yum-utils并配置镜像:

yum install-y yum-utils

yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

# 速度过慢,可以使用阿里镜像
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装docker:

yum install -y docker-ce docker-ce-cli containerd.io

等待下载完后,启动docker:

systemctl start docker

2.阿里云镜像加速

由于docker中容器依赖镜像,镜像存放在仓库中,使用时需要拉取到本地,可以是私有,也可以是公开,最大的开放型镜像仓库为:https://hub.docker.com/
因为是国外的仓库,拉取速度会受影响,可以通过阿里云镜像加速

2.1 进入阿里云

进入网站:https://cr.console.aliyun.com/后,进入控制台

2.2 容器镜像服务

鼠标移动到左上角,进入容器镜像服务

2.3 镜像加速器

选择镜像工具-镜像加速器

按照教程执行命令:

3.helloworld

启动docker后,官方提供了一个测试镜像,执行命令:

docker run hello-world

输出了一些信息:

4.镜像仓库

上面提到过,目前最大的镜像公开仓库:https://hub.docker.com/

二、docker命令

通过docker命令,可以初步了解什么是镜像,什么是容器

1.帮助命令

命令描述
docker version查看docker的版本信息
docker info查看docker详细的信息
docker --helpdocker的帮助命令,可以查看到相关的其他命令

2.镜像命令

命令描述
docker images列出本地主机上的镜像
docker search 镜像名从 docker hub 上搜索镜像
docker pull 镜像名从docker hub 上拉取镜像
docker rmi 镜像名称删除本地镜像
2.1 docker images

docker images是常用命令,可选参数为:

参数描述
-a列出本地所有的镜像
-q只显示镜像ID
--digests显示镜像的摘要信息
--no-trunc显示完整的镜像信息,默认信息过多会进行截取
2.2 docker search

docker search是从docker hub上搜索镜像,下面是我在网页上搜索tomcat的结果:

命令的可选参数为:

参数描述
-f过滤条件 docker search -f STARS=5 tomcat :表示搜索stats>=5的tomcat镜像
--limit分页显示
--no-trunc显示完整信息
2.3 docker pull

docker pull从docker hub上拉取镜像到本地:

2.4 docker rmi

docker rmi删除一个或多个镜像

参数描述
-f强制删除

3.容器命令

命令描述
docker run 镜像名创建并启动一个容器
docker ps列举容器,默认只展示运行中的
docker start 容器名/容器id启动容器
docker restart 容器名/容器id重启容器
docker stop 容器名/容器id停止容器
docker kill 容器名/容器id强制停止容器
docker rm 容器id删除容器
3.1 docker run

docker run每次执行,会产生一个新的容器并运行该容器,支持的参数:

参数描述
--name指定容器名称
-d守护式容器,后台运行
-it-i为交互式模式运行,-t为重新分配一个伪终端,两者通常一起使用
-P随机端口映射
-p指定端口映射关系
-v指定数据卷映射关系
--volumes-from指定数据卷容器

交互式启动:

-bash-4.2# docker run -p 1234:8080 -it tomcat /bin/bash
root@643f11414f56:/usr/local/tomcat# 

交互式退出方式:

  • exit:退出并停止容器
  • ctrl+q+p:退出交互式,容器后台运行
3.2 docker ps

docker ps用于列举容器,默认只展示运行中的,支持的参数为:

参数描述
-a展示所有的容器
-l展示最近创建的容器
-n展示最近n个创建的
-q只展示容器编号
--no-trunc展示完整信息
3.3 docker rm

docker rm支持一次性删除多个容器,后面跟上多个容器id

docker rm-f 22 64
docker rm -f $(docker ps -qa)
docker ps -a -q | xargs docker rm

4.其他命令

命令描述
docker logs 容器id查看容器执行日志
docker inspect 容器id查看容器详细信息
docker exec 容器id 命令进入容器,打开新的终端执行命令
docker attach 容器id进入容器启动命令的终端
docker cp 容器id:容器内路径 目的地路径复制容器的文件到宿主机中
4.1 docker logs

查看终端执行日志:

-bash-4.2# docker logs -t -f --tail 3 d4
2022-08-30T04:20:13.578533223Z 30-Aug-2022 04:20:13.577 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet engine: [Apache Tomcat/10.0.14]
2022-08-30T04:20:13.604351571Z 30-Aug-2022 04:20:13.601 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
2022-08-30T04:20:13.646282364Z 30-Aug-2022 04:20:13.643 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [219] milliseconds
2022-08-30T04:23:57.855531488Z 30-Aug-2022 04:23:57.843 INFO [Thread-2] org.apache.coyote.AbstractProtocol.pause Pausing ProtocolHandler ["http-nio-8080"]
2022-08-30T04:23:57.855560212Z 30-Aug-2022 04:23:57.852 INFO [Thread-2] org.apache.catalina.core.StandardService.stopInternal Stopping service [Catalina]
2022-08-30T04:23:57.860806108Z 30-Aug-2022 04:23:57.857 INFO [Thread-2] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["http-nio-8080"]
2022-08-30T04:23:57.877280602Z 30-Aug-2022 04:23:57.867 INFO [Thread-2] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler ["http-nio-8080"]
4.2 docker inspect
4.3 docker exec

docker exec用于容器内执行命令,支持-it进入交互式模式,并且是新创建一个终端,所以退出并不会导致容器停止

-bash-4.2# docker exec -it d7 /bin/bash
root@d7b4af8ba1ff:/usr/local/tomcat# exit
exit
4.4 docker attach

docker attach是进入启动容器的终端,退出会导致容器停止

-bash-4.2# docker attach d7
^C30-Aug-2022 04:38:01.370 INFO [Thread-2] org.apache.coyote.AbstractProtocol.pause Pausing ProtocolHandler ["http-nio-8080"]
30-Aug-2022 04:38:01.387 INFO [Thread-2] org.apache.catalina.core.StandardService.stopInternal Stopping service [Catalina]
30-Aug-2022 04:38:01.394 INFO [Thread-2] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["http-nio-8080"]
30-Aug-2022 04:38:01.403 INFO [Thread-2] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler ["http-nio-8080"]
4.5 docker cp

docker cp用于将文件复制到宿主机内:

-bash-4.2# docker exec -it d7 /bin/bash
root@d7b4af8ba1ff:/usr/local/tomcat# cd /root
root@d7b4af8ba1ff:~# touch 123.txt
root@d7b4af8ba1ff:~# exit
exit


-bash-4.2# docker cp d7:/root/123.txt /root
-bash-4.2# ls
123.txt 

三、镜像

镜像包含着软件运行环境和基于运行环境开发的软件,是包含了运行某个软件的所有内容,镜像使用UnionFS文件系统,编程语言来理解就是类继承,该文件是可以被继承的,即镜像内部拥有可以分层很多个文件,只是对外表现成一个文件。基于基础镜像,可以制作各种各样的应用镜像
镜像是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部,这一层通常被称为容器层,容器层之下的都叫镜像层。

制作镜像有两种方式:

  • 基于容器制作
  • 基于其他镜像,构建DockerFile制作

1.基于容器制作:docker commit

基于容器制作比较简单,当我们启动一个容器后,会对容器内部进行一些处理,如写入一些文件等等,如果想要创建另一个容器,同时也能拥有这些文件,那么就可以基于容器制作镜像,命令为:

docker commit -m="要提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]

目前有一个tomcat的本地镜像:

1.1 创建容器并添加文件

创建启动容器,添加文件:

-bash-4.2# docker run -it -p 1234:8080 tomcat /bin/bash
root@9d6740173a6c:/usr/local/tomcat# cd webapps
root@9d6740173a6c:/usr/local/tomcat/webapps# mkdir ROOT
root@9d6740173a6c:/usr/local/tomcat/webapps# cd ROOT
root@9d6740173a6c:/usr/local/tomcat/webapps/ROOT# echo hello >> index.html

启动tomcat:

-bash-4.2# docker exec -it 9d /bin/bash
root@9d6740173a6c:/usr/local/tomcat# cd bin/
root@9d6740173a6c:/usr/local/tomcat/bin# ls
bootstrap.jar       commons-daemon-native.tar.gz  digest.sh        shutdown.sh      version.sh
catalina-tasks.xml  commons-daemon.jar            makebase.sh      startup.sh
catalina.sh         configtest.sh                 migrate.sh       tomcat-juli.jar
ciphers.sh          daemon.sh                     setclasspath.sh  tool-wrapper.sh
root@9d6740173a6c:/usr/local/tomcat/bin# ./startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/openjdk-11
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:   
Tomcat started.

访问效果:

1.2 制作镜像
-bash-4.2# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS                                       NAMES
9d6740173a6c   tomcat    "/bin/bash"   9 minutes ago   Up 9 minutes   0.0.0.0:1234->8080/tcp, :::1234->8080/tcp   inspiring_tereshkova

-bash-4.2# docker commit -m="add index.html" -a="aruba" 9d tomcat-hello:1.0
sha256:ba5599c90061b73afe32fa7b44b668a4797f1425d69fcd090ea822522723e5b5

查看镜像:

-bash-4.2# docker images
REPOSITORY     TAG       IMAGE ID       CREATED          SIZE
tomcat-hello   1.0       ba5599c90061   57 seconds ago   680MB
tomcat         latest    fb5657adc892   8 months ago     680MB
1.3 使用镜像

基于刚刚制作的镜像,创建启动容器:

-bash-4.2# docker run -it -p 1244:8080 tomcat-hello:1.0 /bin/bash
root@e7cc44f00318:/usr/local/tomcat# ./bin/startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/openjdk-11
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:   
Tomcat started.

访问效果:

2.基于DockerFile制作镜像

DockerFile就是一个包含命令和参数的脚本,基于基础镜像,构建一个新的镜像

命令描述
FROM基础镜像
MAINTAINER维护者、作者
RUN容器构建时需要运行的命令
EXPOSE当前容器对外暴露的端口
WORKDIR终端默认登录进来的工作目录
ENV设置环境变量
ADD将宿主机目录下的文件拷贝进镜像,会自动处理URL和解压tar压缩包
COPY拷贝文件和目录到镜像中
VOLUME容器数据卷
CMD指定一个容器启动时要运行的命令,只有一条会生效,并会被docker run后跟的命令代替
ENTRYPOINT指定一个容器启动时要运行的命令
ONBUILD当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发

每执行一条命令,都会生成一层新的镜像层

hub上拉取下来的centos镜像不带vim编辑器,我们基于该镜像制作一个新的,并带上vim

2.1 准备工作(yum源问题)

2.1.1 拉取centos

docker pull centos

2.1.2 yum源问题

我这边拉取到的是centos8,centos7可能是没有问题的,创建和启动一个centos8容器后,使用yum下载一直报下载不到repo源:

[root@19bad3f699e6 yum]# yum install wget
Failed to set locale, defaulting to C.UTF-8
CentOS Linux 8 - AppStream                       48  B/s |  38  B     00:00    
Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist

所以DockerFile构建时,使用yum也会报错

尝试手动解除repo中的baseUrl注释,默认baseUrl是被注释的

cat /etc/yum.repos.d/CentOS-Linux-AppStream.repo
# CentOS-Linux-AppStream.repo
#
# The mirrorlist system uses the connecting IP address of the client and the
# update status of each mirror to pick current mirrors that are geographically
# close to the client.  You should use this for CentOS updates unless you are
# manually picking other mirrors.
#
# If the mirrorlist does not work for you, you can try the commented out
# baseurl line instead.

[appstream]
name=CentOS Linux $releasever - AppStream
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=AppStream&infra=$infra
#baseurl=http://mirror.centos.org/$contentdir/$releasever/AppStream/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial

通过vibaseUrl的注释去除,并且注释掉mirrorlist

vi /etc/yum.repos.d/CentOS-Linux-AppStream.repo
# CentOS-Linux-AppStream.repo
#
# The mirrorlist system uses the connecting IP address of the client and the
# update status of each mirror to pick current mirrors that are geographically
# close to the client.  You should use this for CentOS updates unless you are
# manually picking other mirrors.
#
# If the mirrorlist does not work for you, you can try the commented out
# baseurl line instead.

[appstream]
name=CentOS Linux $releasever - AppStream
mirrorlist=http://mirrorlist.centos.org/?#release=$releasever&arch=$basearch&repo=AppStream&infra=$infra
baseurl=http://mirror.centos.org/$contentdir/$releasever/AppStream/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial

再次报错,不过这次可以看到是哪个地址请求不到了:

进入http://mirror.centos.org/centos/8/后,发现并没有AppStream目录:

2.1.3 解决yum源问题

http://mirror.centos.org/centos/中查找,发现AppStreamBaseOS搬到了http://mirror.centos.org/centos/8-stream/下:

需要将repo文件中的$releasever换成8-stream

vi CentOS-Linux-BaseOS.repo
vi CentOS-Linux-AppStream.repo

CentOS-Linux-BaseOS.repo修改后:

# CentOS-Linux-BaseOS.repo
#
# The mirrorlist system uses the connecting IP address of the client and the
# update status of each mirror to pick current mirrors that are geographically
# close to the client.  You should use this for CentOS updates unless you are
# manually picking other mirrors.
#
# If the mirrorlist does not work for you, you can try the commented out
# baseurl line instead.

[baseos]
name=CentOS Linux $releasever - BaseOS
mirrorlist=http://mirrorlist.centos.org/?release=8-stream&arch=$basearch&repo=BaseOS&infra=$infra
#baseurl=http://mirror.centos.org/$contentdir/$releasever/BaseOS/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial

CentOS-Linux-AppStream.repo修改后:

# CentOS-Linux-AppStream.repo
#
# The mirrorlist system uses the connecting IP address of the client and the
# update status of each mirror to pick current mirrors that are geographically
# close to the client.  You should use this for CentOS updates unless you are
# manually picking other mirrors.
#
# If the mirrorlist does not work for you, you can try the commented out
# baseurl line instead.

[appstream]
name=CentOS Linux $releasever - AppStream
mirrorlist=http://mirrorlist.centos.org/?release=8-stream&arch=$basearch&repo=AppStream&infra=$infra
#baseurl=http://mirror.centos.org/$contentdir/$releasever/AppStream/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial

再次尝试安装wget,即可成功下载安装了

2.1.4 将容器打包镜像
后面centos镜像就使用该容器的

-bash-4.2# docker commit -m="yum" -a="aruba" ff centos-yum:1.0
2.2 DockerFile文件编写
vi dockerfile

内容为:

# 基础镜像
FROM centos-yum:1.0
MAINTAINER aruba

# 申明一个变量
ENV path /usr/local
# 设置工作目录
WORKDIR $path

# 安装vim
RUN yum install -y vim

EXPOSE 8080

# 最后执行命令
CMD /bin/bash

最后加上CMD /bin/bash后,如果创建容器时不指定后面的命令,那么会自动执行CMD命令进入虚拟终端

2.3 构建镜像

语法:docker build -f dockerfile名称 -t 新建的镜像名:TAG .

docker build -f dockerfile -tcentos-vim:1.0 .

最后成功创建的信息:

创建启动容器,已经可以使用vim了:

-bash-4.2# docker run -itcentos-vim:1.0
[root@56771cf32cbb local]# vim 1.txt

四、数据卷

前面我们了解到,容器启动是在镜像层上添加了一个容器层,拥有独立的进程,也拥有独立的数据存储,一旦容器不制作成镜像就被删除,那么原先容器内部的数据也会删除
数据卷打通了宿主机和容器之间的桥梁,可以将目录或文件挂载到一个或多个容器中,实现数据的持久化和容器间共享

1. 数据卷使用

1.1 创建容器

创建容器时,指定数据卷映射,语法为:

docker run -it -v /宿主机绝对路径:/容器内目录[:ro] 镜像名[:ro]为可选项,表示只读

在宿主机创建文件夹,并映射到容器中:

-bash-4.2# mkdir shared
-bash-4.2# docker run -it -v ./shared:/root/c-shared centos-vim:1.0
docker: Error response from daemon: create ./shared: "./shared" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed. If you intended to pass a host directory, use absolute path.
See 'docker run --help'.
-bash-4.2# docker run -it -v /root/shared:/root/c-shared centos-vim:1.0

可以通过docker inspect中查找到数据卷信息:

1.2 容器内目录创建文件

容器内目录创建一个文件:

[root@1576b2c30b88 c-shared]# cd /root/c-shared/
[root@1576b2c30b88 c-shared]# echo 123 >> a.txt

查看宿主机中文件内容:

-bash-4.2# cd /root/shared
-bash-4.2# cat a.txt
123
1.3 宿主机修改文件内容

在宿主机中将文件内容修改:

-bash-4.2# vi a.txt
-bash-4.2# cat a.txt
123
abc

在容器内,查看文件内容:

[root@1576b2c30b88 c-shared]# cat a.txt
123
abc
1.4 删除容器

上面两个例子说明了,无论是在容器内操作数据卷,还是在宿主机内操作,数据都是同步的,接下来将容器删除:

-bash-4.2# docker ps -a
CONTAINER ID   IMAGE            COMMAND                  CREATED          STATUS                       PORTS      NAMES
1576b2c30b88   centos-vim:1.0   "/bin/sh -c /bin/bash"   6 minutes ago    Exited (130) 7 seconds ago              reverent_bhabha
56771cf32cbb   centos-vim:1.0   "/bin/sh -c /bin/bash"   42 minutes ago   Up 42 minutes                8080/tcp   sad_yonath
19bad3f699e6   centos           "/bin/bash"              2 hours ago      Exited (1) 48 minutes ago               flamboyant_kalam
-bash-4.2# docker rm 15
15

宿主机内的文件还是存在的:

-bash-4.2# ls
a.txt
-bash-4.2# cat a.txt
123
abc

2. 构建镜像指定数据卷

除了在创建容器时,指定数据卷外,还可以在DockerFile构建镜像时,指定数据卷,

2.1 构建镜像

dockerfile2文件内容:

FROM centos-vim:1.0
MAINTAINER aruba

VOLUME ["/root/shared2"]

CMD /bin/bash

构建镜像:

docker build -f dockerfile2 -tcentos-share:1.0 .
2.2 创建启动容器
docker run -it --name aruba-centoscentos-share:1.0

此时查看容器的数据卷信息:

是映射到了宿主机上的一个随机目录/var/lib/docker/volumes/59365ccb1af478f0c6611d8a36ac1518f9b8da8f2330e416ba197d023260e78f/_data,并且每次创建新的容器,都会产生一个新的随机目录

2.3 数据卷中创建文件

我们在容器数据卷中创建一个文件:

[root@4553615bd221 local]# cd /root/shared2/
[root@4553615bd221 shared2]# touch b.txt

宿主机中查看:

-bash-4.2# cd /var/lib/docker/volumes/59365ccb1af478f0c6611d8a36ac1518f9b8da8f2330e416ba197d023260e78f/_data
-bash-4.2# ls
b.txt
2.3 删除容器
-bash-4.2# docker ps -a
CONTAINER ID   IMAGE              COMMAND                  CREATED             STATUS                         PORTS      NAMES
4553615bd221   centos-share:1.0   "/bin/sh -c /bin/bash"   7 minutes ago       Exited (130) 6 seconds ago                aruba-centos
d5f613aab62c   centos-vim:1.0     "/bin/sh -c /bin/bash"   24 minutes ago      Up 24 minutes                  8080/tcp   vibrant_hofstadter
56771cf32cbb   centos-vim:1.0     "/bin/sh -c /bin/bash"   About an hour ago   Up About an hour               8080/tcp   sad_yonath
19bad3f699e6   centos             "/bin/bash"              3 hours ago         Exited (1) About an hour ago              flamboyant_kalam
-bash-4.2# docker rm 45
45

宿主机中的文件还是存在的:

-bash-4.2# ls
b.txt

3. 数据卷容器

如果多个容器要共用一个数据卷,一个个在创建时进行手动指定映射比较繁琐,一个容器如果使用了数据卷,那么它就是一个数据卷容器,其他容器可以直接指定数据卷容器来实现共用

3.1 创建数据卷容器

基于上面的数据卷镜像,重新创建一个:

docker run -it --name aruba-centoscentos-share:1.0
3.2 --volumes-from容器关联

创建另外两个容器,使用--volumes-from关联上该数据卷容器:

docker run-it --name aruba-centos2 --volumes-from aruba-centos centos-share:1.0
docker run-it --name aruba-centos3 --volumes-from aruba-centos centos-share:1.0
3.3 数据卷中创建文件

创建的三个容器都有/root/shared2目录,随便找个容器进行文件的创建:

[root@86df03edebaf usr]# cd /root/shared2/
[root@86df03edebaf shared2]# touch c.txt

其他容器中也能够看到刚刚创建的文件:

[root@ca9f28d72e9e local]# cd /root/shared2/
[root@ca9f28d72e9e shared2]# ls
c.txt
3.4 删除数据卷容器

将一开始创建的数据卷容器删除:

-bash-4.2# docker rm 7b
7b
-bash-4.2# docker ps -a
CONTAINER ID   IMAGE              COMMAND                  CREATED             STATUS                         PORTS      NAMES
86df03edebaf   centos-share:1.0   "/bin/sh -c /bin/bash"   3 minutes ago       Up 3 minutes                   8080/tcp   aruba-centos3
ca9f28d72e9e   centos-share:1.0   "/bin/sh -c /bin/bash"   4 minutes ago       Up 4 minutes                   8080/tcp   aruba-centos2
d5f613aab62c   centos-vim:1.0     "/bin/sh -c /bin/bash"   35 minutes ago      Up 35 minutes                  8080/tcp   vibrant_hofstadter
56771cf32cbb   centos-vim:1.0     "/bin/sh -c /bin/bash"   About an hour ago   Up About an hour               8080/tcp   sad_yonath
19bad3f699e6   centos             "/bin/bash"              3 hours ago         Exited (1) About an hour ago              flamboyant_kalam

其他的容器还依然存在着数据卷:

[root@86df03edebaf shared2]# ls
c.txt

以上为Docker入门操作,主要包含Docker的安装,Docker命令,镜像拉取,自定义镜像,容器操作,数据卷内容

posted @   aruba_233  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示