什么是docker
docker中的容器:
lxc –> libcontainer –> runC
OCI&OCF
OCI
Open Container-initiative(开放容器倡议)
由Linux基金会主导于2015年6月创立
旨在围绕容器格式和运行时制定一个开放的工业化标准
包含两个规格:
运行时规范(runtime-spec)
形象规范(image-spec)
OCF
Open Container Format(开放式容器格式)
runC 是一个 CLI 工具,用于根据 OCI 规范生成和运行容器
容器作为 runC 的子进程启动,可以嵌入到各种其他系统中,而无需运行守护进程
runC 建立在 libcontainer 之上,同样的容器技术为数百万个 Docker 引擎安装提供支持
docker提供了一个专门容纳容器镜像的站点
docker架构
docker使用的是C/S架构(服务端/客户端)Docker客户端与 Docker守护进程对话,后者负责构建、运行和分发 Docker 容器的繁重工作。Docker 客户端和守护程序可以 运行在同一系统上,或者您可以将 Docker 客户端连接到远程 Docker 守护程序。Docker 客户端和守护进程使用 REST API、UNIX 套接字或网络接口进行通信。另一个 Docker 客户端是 Docker Compose,它允许您使用由一组容器组成的应用程序。
Docker使用客户端 – 服务器架构。守护程序docker daemon 负责构建,上传和运行您的Docker容器。
Docker客户端和守护程序可以在同一系统上运行,也可以将Docker客户端连接到远程Docker守护程序。Docker客户端和守护程序使用REST API,通过UNIX套接字或网络接口进行通信。
Docker主机
Docker主机运行docker daemon。Docker守护程序侦听Docker请求。
Docker请求可以是“docker run”,“docker build”,任何命令。
它管理docker对象,如镜像,容器,网络和卷。
Docker客户端
Docker Client用于触发Docker命令。当我们发送任何命令(docker build,docker run等)时,docker客户端会将这些命令结束到Docker守护进程,这将进一步处理它们。
注意:Docker客户端可以与多个守护程序通信。
Docker仓库
Registry是一个无状态,高度可扩展的服务器端应用程序,可存储并允许您分发Docker镜像。您可以创建自己的镜像,也可以使用公共仓库,即Docker Hub和Docker Cloud。Docker配置为默认在Docker Hub上查找镜像。
我们实际上可以创建自己的仓库。
因此,当我们运行命令docker pull或docker run时,将从配置的仓库中提取所需的映像。使用docker push命令时,映像将被推送到配置的仓库。
docker的镜像与镜像仓库
为什么镜像仓库名字是Registry而不是repository?在docker中仓库的名字是以应用的名称取名的。
大家应该在码头或港口见过集装箱
registry:就类似于码头的集装箱,集装箱里装的是同一种货物。(这个也就是我们所说的镜像)
repository:就类似于存放集装箱的场地。(这个就是镜像仓库)
镜像是静态的,而容器是动态的,容器有其生命周期,镜像与容器的关系类似于程序与进程的关系。镜像类似于文件系统中的程序文件,而容器则类似于将一个程序运行起来的状态,也即进程。
因为容器是通过镜像构建出来的,这就好比人的心脏,当心脏停止跳动,人自然也就生命活动了。
Docker对象
Docker镜像,容器,网络,卷,插件等是Docker对象。
在Dockerland,有图像,有容器。这两者密切相关,但截然不同。但这一切都始于Dockerfile。
一个Dockerfile是您创建镜像时,你建立的一个文件。它包含一堆指令,告知Docker如何构建Docker镜像。
你可以把它与烹饪联系起来。在烹饪中你有食谱。通过配方,您可以了解必须采取的所有步骤,以便生成您想要烹饪的任何内容。烹饪行为正在建立食谱。
docker的安装以及使用方法
若之前安装过旧版本就卸载重新安装
加粗样式
// 若没有安装过docker或新环境则可跳过此步骤
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
//设置存储库
[root@localhost ~]# yum -y install yum-utils //这是为了提供yum-config-manager命令
[root@localhost ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo // 提供docker官方的存储库
[root@localhost ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo //也可以添加阿里云的库
// 配置docker,因为docker默认使用的是国外的源要修改为国内的源
[root@localhost ~]# sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
//安装docker以及依赖
[root@localhost ~]# yum -y install docker-ce docker-ce-cli containerd.io
// 可以通过使用下面的方法安装指定的版本
yum list docker-ce --showduplicates | sort -r //列出docker的版本
配置docker加速器
点击去之后就可以看到属于自己的镜像加速器了
docker-ce的配置文件是/etc/docker/daemon.json,此文件默认不存在,需要我们手动创建并进行配置,而docker的加速就是通过配置此文件来实现的。
docker的加速有多种方式:
docker cn
中国科技大学加速器
阿里云加速器
docker是国外的,拉取镜像的时候会很慢,所以要配置加速器来提高访问速度
建议使用阿里云的加速器
// docker官方的加速器
[root@localhost ~]# sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
EOF
// 阿里云的加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://cgxhrn28.mirror.aliyuncs.com"]
}
EOF
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker.service
启动docker服务并设置开机自启
[root@localhost ~]# systemctl enable --now docker.service
测试docker容器否安装成功
[root@localhost ~]# docker version
Client: Docker Engine - Community //容器引擎的社区版
Version: 20.10.11 //客户端的版本号
API version: 1.41 //这个是API的版本号
Go version: go1.16.9 //这个是GO语言的版本号
Git commit: dea9396 //docker这个版本提交的什么信息
Built: Thu Nov 18 00:36:58 2021 //此docker版本构建的时间
OS/Arch: linux/amd64 //系统平台
Context: default //这个为上下文
Experimental: true // 表示是否为测试版本
Server: Docker Engine - Community
Engine:
Version: 20.10.11 //服务端的版本号
API version: 1.41 (minimum version 1.12)
Go version: go1.16.9
Git commit: 847da18
Built: Thu Nov 18 00:35:20 2021
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.4.12 //这个是容器版本
GitCommit: 7b11cfaabd73bb80907dd23182b9347b4245eb5d
runc:
Version: 1.0.2 //runC的版本号
GitCommit: v1.0.2-0-g52b36a2
docker-init:
Version: 0.19.0 /docker的init的版本号
GitCommit: de40ad0
[root@localhost ~]# docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:cc15c5b292d8525effc0f89cb299f1804f3a725c8d05e158653a563f15e4f685
Status: Downloaded newer image for hello-world:latest
Hello from Docker! //出现此行表示安装成功
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
docker命令、参数以及使用
[root@localhost ~]# docker info
Client:
Context: default // 客户端的上下文
Debug Mode: false //debug(测试)模式的状态
Plugins: //docker的插件
app: Docker App (Docker Inc., v0.9.1-beta3)
buildx: Build with BuildKit (Docker Inc., v0.6.3-docker) //buildx镜像的工具包
scan: Docker Scan (Docker Inc., v0.9.0)
Server: //下面是容器的状态
Containers: 1 //容器的个数
Running: 0 //运行的容器个数
Paused: 0 // 暂停状态的容器
Stopped: 1 //停止状态的容器
Images: 1 // 镜像的个数
Server Version: 20.10.11 //dockers服务端的版本
Storage Driver: overlay2 //储存的驱动版本
Backing Filesystem: xfs //后端的文件系统格式为xfs格式(centos7是使用的extfs)
Supports d_type: true
Native Overlay Diff: true
userxattr: false //是否支持用户的attr的设置
Logging Driver: json-file //日志记录的引擎是json文件的格式
Cgroup Driver: cgroupfs //cgroup的驱动
Cgroup Version: 1 //Cgroup的版本
Plugins: //插件
Volume: local //联合挂载的卷默认在本地
Network: bridge host ipvlan macvlan null overlay //支持的网络类型
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog //日志格式
Swarm: inactive //可以将多个主机逻辑上成一个主机
Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc //运行时的类型
Default Runtime: runc //运行时所使用的类型
Init Binary: docker-init //初始化时的二进制使用的程序
containerd version: 7b11cfaabd73bb80907dd23182b9347b4245eb5d
runc version: v1.0.2-0-g52b36a2 //版本号
init version: de40ad0 //版本号
Security Options: //安全选项
seccomp
Profile: default
Kernel Version: 4.18.0-257.el8.x86_64 //内核的版本号
Operating System: CentOS Stream 8 //系统版本
OSType: linux //系统类型
Architecture: x86_64 //架构类型
CPUs: 2 //CUP的核心数
Total Memory: 1.748GiB //内存大小
Name: localhost.localdomain //主机名
ID: SW5D:GFAD:BJBT:45EY:JMIL:JRFV:EZSW:KZCD:USZM:AGWA:NFQJ:YNRD
Docker Root Dir: /var/lib/docker //docker的工作目录
Debug Mode: false //debug模式的状态
Registry: https://index.docker.io/v1/ //仓库的位置
Labels: //标签
Experimental: false //是否是属于测试版本
Insecure Registries: //不安全的仓库
127.0.0.0/8
Registry Mirrors:
https://docker.mirrors.ustc.edu.cn/ //加速器的位置
Live Restore Enabled: false //docker的存活期的开启的功能时关闭状态
docker常用命令
命令 | 功能 |
---|---|
docker search | 在 Docker Hub 中搜索镜像 |
docker pull | 从注册表中拉取镜像或存储库 |
docker images | 列出镜像 |
docker create | 创建一个新的容器 |
docker start | 启动一个或多个停止的容器 |
docker run | 在新容器中运行命令 |
docker attach | 附加到正在运行的容器 |
docker ps | 列出容器 |
docker logs | 获取容器的日志 |
docker restart | 重启一个容器 |
docker stop | 停止一个或多个正在运行的容器 |
docker kill | 杀死一个或多个正在运行的容器 |
docker rm | 移除一个或多个容器 |
docker exec | 在正在运行的容器中运行命令 |
docker info | 显示系统范围的信息 |
docker inspect | 返回有关 Docker 对象的低级信息 |
docker search命令
可以通过访问官网的方式下载想要的镜像,前提时需要登录
docker官网
docker search命令
// 按受欢迎的程度来排序
[root@localhost ~]# docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 15899 [OK]
jwilder/nginx-proxy Automated Nginx reverse proxy for docker con… 2098 [OK]
richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of… 819 [OK]
jc21/nginx-proxy-manager Docker container for managing Nginx proxy ho… 285
linuxserver/nginx An Nginx container, brought to you by LinuxS… 160
tiangolo/nginx-rtmp Docker image with Nginx using the nginx-rtmp… 146 [OK]
jlesage/nginx-proxy-manager Docker container for Nginx Proxy Manager 144 [OK]
alfg/nginx-rtmp NGINX, nginx-rtmp-module and FFmpeg from sou… 110 [OK]
nginxdemos/hello NGINX webserver that serves a simple page co… 79 [OK]
privatebin/nginx-fpm-alpine PrivateBin running on an Nginx, php-fpm & Al… 60 [OK]
nginx/nginx-ingress NGINX and NGINX Plus Ingress Controllers fo… 57
nginxinc/nginx-unprivileged Unprivileged NGINX Dockerfiles 54
nginxproxy/nginx-proxy Automated Nginx reverse proxy for docker con… 28
staticfloat/nginx-certbot Opinionated setup for automatic TLS certs lo… 25 [OK]
nginx/nginx-prometheus-exporter NGINX Prometheus Exporter for NGINX and NGIN… 22
schmunk42/nginx-redirect A very simple container to redirect HTTP tra… 19 [OK]
centos/nginx-112-centos7 Platform for running nginx 1.12 or building … 16
centos/nginx-18-centos7 Platform for running nginx 1.8 or building n… 13
flashspys/nginx-static Super Lightweight Nginx Image 11 [OK]
mailu/nginx Mailu nginx frontend 9 [OK]
sophos/nginx-vts-exporter Simple server that scrapes Nginx vts stats a… 7 [OK]
ansibleplaybookbundle/nginx-apb An APB to deploy NGINX 3 [OK]
wodby/nginx Generic nginx 1 [OK]
arnau/nginx-gate Docker image with Nginx with Lua enabled on … 1 [OK]
centos/nginx-110-centos7 Platform for running nginx 1.10 or building … 0
docker pull命令
[root@localhost ~]# docker pull nginx:1.20.2 //从docker官网中拉取1.20.2版本的nginx镜像
1.20.2: Pulling from library/nginx
eff15d958d66: Pull complete
1f3e1e3ef6aa: Pull complete
231009cab23f: Pull complete
b2ef879f0046: Pull complete
5495a7eec709: Pull complete
ddde57a4eac9: Pull complete
Digest: sha256:6ce65dd1f3bf44fa60a0212f0f893b78a706f20f09c884b43de50037067d9f5d
Status: Downloaded newer image for nginx:1.20.2
docker.io/library/nginx:1.20.2 //从此处可以看出镜像的版本信息
[root@localhost ~]# docker pull nginx //若直接拉取镜像默认拉取最新版本的镜像
[root@localhost ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
eff15d958d66: Already exists
1e5351450a59: Pull complete
2df63e6ce2be: Pull complete
9171c7ae368c: Pull complete
020f975acd28: Pull complete
266f639b35ad: Pull complete
Digest: sha256:097c3a0913d7e3a5b01b6c685a60c03632fc7a2b50bc8e35bcaa3691d788226e
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest //最新版本的镜像
docker images命令
[root@localhost ~]# docker images //此命令可以看你所拥有的镜像数量
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx 1.20.2 aedf7f31bdab 2 weeks ago 141MB
nginx latest ea335eea17ab 2 weeks ago 141MB
hello-world latest feb5d9fea6a5 2 months ago 13.3kB
docker create命令
// 创建一个容器
[root@localhost ~]# docker create nginx //这个和拉取镜像一样,不指定版本号默认创建最新的
c6119340dcc32204c447c3340ee54ee705f34657e3a9d3aef4d1090064b5fa82
// 当本地没有镜像时docker就会自带去docker仓库去拉取最新版本来创建容器
[root@localhost ~]# docker create busybox //这个镜像本地没有
Unable to find image 'busybox:latest' locally
latest: Pulling from library/busybox
3aab638df1a9: Pull complete
Digest: sha256:52817dece4cfe26f581c834d27a8e1bcc82194f914afe6d50afad5a101234ef1
Status: Downloaded newer image for busybox:latest
b1fe6541bb6031fc6c057cb726aabfe1f1da6b9fd1cdf9b278c3233c173a369c
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest d23834f29b38 33 hours ago 1.24MB
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b1fe6541bb60 busybox "sh" 3 minutes ago Created modest_easley
[root@localhost ~]# docker start b1fe6541bb60 //启动此容器
b1fe6541bb60
[root@localhost ~]# docker ps //发现没有启动
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
// 那是因为sh这个命令执行完之后,就没有任务需要执行所以就直接退出了
// 可以执行下面的命令让他保持运行状态,通俗的说就是给她一个任务让他执行,也就是让他有事做
[root@localhost ~]# docker create busybox sleep 500
b13bcfc22a02c710fa7c4e30f3d4a8293dedf25a619d6c2cab319c27b5934167
// 此时我们再次启动发现他处于运行状态
[root@localhost ~]# docker start b13bcfc22a02
b13bcfc22a02
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b13bcfc22a02 busybox "sleep 500" About a minute ago Up 4 seconds dreamy_turing
docker ps命令
[root@localhost ~]# docker ps //此命令只能查看正在运行的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost ~]# docker ps -a //加-a可以查看所有的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c6119340dcc3 nginx "/docker-entrypoint.…" 3 minutes ago Created vigorous_mestorf
efa2e040f6d0 hello-world "/hello" 33 hours ago Exited (0) 33 hours ago gracious_ardinghelli
// 从左至右分别是容器的ID、镜像、容器执行的命令、创建容器的时间、容器的状态、容器运行的服务的端口号、容器名字
docker start命令
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c6119340dcc3 nginx "/docker-entrypoint.…" 10 minutes ago Up About a minute 80/tcp vigorous_mestorf
[root@localhost ~]# docker stop c6119340dcc3 //停止运行容器
c6119340dcc3
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
docker restart命令
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost ~]# docker restart c6119340dcc3 //重启容器
c6119340dcc3
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c6119340dcc3 nginx "/docker-entrypoint.…" 11 minutes ago Up 5 seconds 80/tcp vigorous_mestorf
docker kill命令
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c6119340dcc3 nginx "/docker-entrypoint.…" 14 minutes ago Up 2 minutes 80/tcp vigorous_mestorf
//这个kill命令和stop的功能一样,但是有一点不同的是kill是直接杀死进程类似于kill -9命令,属于暴力关闭,而stop类似于kill -15命令,属于"优雅"的关闭
[root@localhost ~]# docker kill c6119340dcc3
c6119340dcc3
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
docker run命令
-i 就是交互模式,可以和容器进行交互
- t 指定tty 就是给容器一个类似于shell
[root@localhost ~]# docker run -it busybox /bin/sh //容器里面也可以执行命令行的命令
/ #
/ # ip a //查看容器的IP地址
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
16: eth0@if17: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
/ # exit //退出容器
// docker run -d 让容器后台运行并且打印容器id
[root@localhost ~]# docker run -d httpd //让httpd处于后台运行
Unable to find image 'httpd:latest' locally
latest: Pulling from library/httpd
eff15d958d66: Already exists
ba1caf8ba86c: Pull complete
ab86dc02235d: Pull complete
0d58b11d2867: Pull complete
e88da7cb925c: Pull complete
Digest: sha256:1d71eef54c08435c0be99877c408637f03112dc9f929fba3cccdd15896099b02
Status: Downloaded newer image for httpd:latest
2d110156953c6e4b7f497edef0c57503563ee97d49d953bd9c18177aa2ca0f8e //此处为容器的id
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2d110156953c httpd "httpd-foreground" 46 seconds ago Up 43 seconds 80/tcp relaxed_moore
docker inspect 命令
[root@localhost ~]# docker inspect 2d110156953c //inspect+容器的id,可以查看容器的详细信息
[
{
"Id": "2d110156953c6e4b7f497edef0c57503563ee97d49d953bd9c18177aa2ca0f8e",
"Created": "2021-12-01T20:43:05.569236546Z",
"Path": "httpd-foreground",
"Args": [],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 3554,
"ExitCode": 0,
"Error": "",
"StartedAt": "2021-12-01T20:43:07.921679379Z",
"FinishedAt": "0001-01-01T00:00:00Z"
此处省略N行
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:02",
"DriverOpts": null
[root@localhost ~]# curl 172.17.0.2 //通过容器的IP进行访问
<html><body><h1>It works!</h1></body></html>
docker logs命令
如果一个容器中运行了多个服务,那么这个功能将失效了。这也事因为一个容器只运行一个服务的原因
[root@localhost ~]# docker logs 2d110156953c //查看服务的日志
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
[Wed Dec 01 20:43:07.990665 2021] [mpm_event:notice] [pid 1:tid 139955215789376] AH00489: Apache/2.4.51 (Unix) configured -- resuming normal operations
[Wed Dec 01 20:43:07.991055 2021] [core:notice] [pid 1:tid 139955215789376] AH00094: Command line: 'httpd -D FOREGROUND'
172.17.0.1 - - [01/Dec/2021:20:49:46 +0000] "GET / HTTP/1.1" 200 45
172.17.0.1 - - [01/Dec/2021:20:53:57 +0000] "GET / HTTP/1.1" 200 45
docker attach命令
[root@localhost ~]# docker attach 2d110156953c //进入容器,但是会占用前台,不能做任何操作,一般不建议使用此操作
docker exec命令
// 容器后台
[root@localhost ~]# docker exec -it 2d110156953c /bin/bash
root@2d110156953c:/usr/local/apache2# ls
bin build cgi-bin conf error htdocs icons include logs modules
docker rm命令
// docker rm命令只能删除停止状态的容器,处于运行状态的容器删除不了。
docker rm -f命令可强制删除容器
// -a是列出所有的容器,-q是列出容器的id
[root@localhost ~]# docker rm $(docker ps -aq) //这种方法可以批量删除容器
c97fccd0eed8
071d7e163079
cf54d5708379
34d776168c94
b13bcfc22a02
b1fe6541bb60
c6119340dcc3
efa2e040f6d0
Error response from daemon: You cannot remove a running container 2d110156953c6e4b7f497edef0c57503563ee97d49d953bd9c18177aa2ca0f8e. Stop the container before attempting removal or force remove
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2d110156953c httpd "httpd-foreground" 20 minutes ago Up 20 minutes 80/tcp relaxed_moore