Docker-入门

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

一、Docker安装

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

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

1.安装

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

yum remove 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 --help docker的帮助命令,可以查看到相关的其他命令

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 -t centos-vim:1.0 .

最后成功创建的信息:

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

-bash-4.2# docker run -it centos-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 -t centos-share:1.0 .
2.2 创建启动容器
docker run -it --name aruba-centos centos-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-centos centos-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命令,镜像拉取,自定义镜像,容器操作,数据卷内容

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容