OCI&OCF
OCI
Open Container-initiative
- 由Linux基金会主导于2015年6月创立
- 旨在围绕容器格式和运行时制定一个开放的工业化标准
- contains two specifications
- the Runtime Specification(runtime-spec)
- the Image Specification(image-spec)
OCF
Open Container Format
runC是一个CLI工具,用于根据OCI规范生成和运行容器
- 容器作为runC的子进程启动,可以嵌入到各种其他系统中,而无需运行守护进程
- runC建立在libcontainer之上,同样的容器技术为数百万的Docker Engine安装提供动力
docker架构
Docker 包括三个基本概念:
- 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
- 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
- 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
镜像是静态的,而容器是动态的,容器有其生命周期,镜像与容器的关系类似于程序与进程的关系。镜像类似于文件系统中的程序文件,而容器则类似于将一个程序运行起来的状态,也即进程。所以容器是可以删除的,容器被删除后其镜像是不会被删除的。
概念 | 说明 |
---|---|
Docker 客户端(Client) | Docker 客户端通过命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 与 Docker 的守护进程通信。 |
Docker 主机(Host) | 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器 |
Docker 镜像(Images) | Docker 镜像是用于创建 Docker 容器的模板,比如 Centos系统。 |
Docker Registry | Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库 一个 Docker Registry 中可以包含多个仓库(Repository) 每个仓库可以包含多个标签(Tag);每个标签对应一个镜像 一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本 通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签 |
docker对象
当您使用docker时,在创建时会使用镜像、容器、网络、卷、插件和其他对象。
- 镜像
- 镜像是一个只读模板,带有创建docker容器的说明
- 通常,一个镜像基于另一个镜像,带有一些额外的定制
- 可以创建自己的镜像,也可以只使用他人创建并在注册表中发布的镜像
- 容器
- 容器是镜像的可运行实例
- 您可以使用docker API或CLI创建、运行、停止、移动或删除容器
- 您可以将容器连接到一个或多个网络,为其附加存储,甚至可以基于其当前状态创建新的映像
安装及使用docker
docker安装
[root@localhost yum.repos.d]# pwd
/etc/yum.repos.d
[root@localhost yum.repos.d]# curl -o docker-ce.repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--: 0 0 0 0 0 0 0 0 --:--:-- 0:00: 0 0 0 0 0 0 0 0 --:--:-- 0:00:100 1919 100 1919 0 0 674 0 0:00:02 0:00:02 --:--:-- 674
[root@localhost yum.repos.d]# sed -i 's@https://download.docker.com@https://mirrors.tuna.tsinghua.edu.cn/docker-ce@g' docker-ce.repo
[root@localhost yum.repos.d]# yum clean all
[root@localhost yum.repos.d]# yum makecache
[root@localhost yum.repos.d]# yum -y install docker-ce
docker加速
docker-ce的配置文件是/etc/docker/daemon.json,此文件默认不存在,需要我们手动创建并进行配置,或者启动docker服务是会自动创建此目录,一般选择开启服务自动创建此方法,而docker的加速就是通过配置此文件来实现的。
docker的加速有多种方式:
- docker cn
- 中国科技大学加速器
- 阿里云加速器(需要通过阿里云开发者平台注册帐号,免费使用个人私有的加速器)
以下举例演示使用阿里云加速器:
//开启服务,目录自动创建
[root@localhost ~]# systemctl enable --now docker
[root@localhost ~]# ls /etc/docker/
key.json
[root@localhost ~]# tee /etc/docker/daemon.json <<-'EOF'
> {
> "registry-mirrors": ["https://wjscumc2.mirror.aliyuncs.com"]
> }
> EOF
{
"registry-mirrors": ["https://wjscumc2.mirror.aliyuncs.com"]
}
[root@localhost ~]# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://wjscumc2.mirror.aliyuncs.com"]
}
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker
docker常用操作
命令 | 功能 |
---|---|
docker search | 在Docker Hub上搜索图像 |
docker pull | Pull an image or a repository from a registry |
docker images | List images |
docker create | Create a new conntainer |
docker start | Start one or more stopped containers |
docker stop | Stop one or more running containers |
docker restart | Restart a container |
docker run | Run a command in a new container |
docker ps | List containers |
docker logs | Fetch the logs of a container |
docker kill | Kill one or more running containers |
docker info | Display system-wide information |
docker rm | Remove onne or more containers |
docker exec | Run a command in a running container |
docker attach | Attach to a runninng container |
docker inspect | Return low-level information on Docker objects |
- docker version
[root@localhost ~]# docker version
Client: Docker Engine - Community
Version: 20.10.11
API version: 1.41
Go version: go1.16.9
Git commit: dea9396
Built: Thu Nov 18 00:36:58 2021
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
GitCommit: v1.0.2-0-g52b36a2
docker-init:
Version: 0.19.0
GitCommit: de40ad0
- docker info
[root@localhost ~]# docker info
Client:
Context: default
Debug Mode: false
Plugins:
app: Docker App (Docker Inc., v0.9.1-beta3)
buildx: Build with BuildKit (Docker Inc., v0.6.3-docker)
scan: Docker Scan (Docker Inc., v0.9.0)
Server: //经常查看此处
Containers: 0 //有多少容器
Running: 0 //有几个正在运行的容器
Paused: 0 //有几个暂停的容器
Stopped: 0 //有几个停止的容器
Images: 0 //有几个镜像
Server Version: 20.10.11
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Cgroup Version: 1
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-193.el8.x86_64
Operating System: CentOS Linux 8 (Core)
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 1.914GiB
Name: localhost.localdomain
ID: YNX5:PSG5:7TXE:3SS4:GVH4:VVYR:2JQX:KNGD:IJ24:E5Y6:M4ZT:KAHD
Docker Root Dir: /var/lib/docker //工作目录
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Registry Mirrors:
https://wjscumc2.mirror.aliyuncs.com/ //加速器
Live Restore Enabled: false
- 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
bitwarden/nginx The Bitwarden nginx web server acting as a r… 11
flashspys/nginx-static Super Lightweight Nginx Image 11 [OK]
mailu/nginx Mailu nginx frontend 9 [OK]
webdevops/nginx Nginx container 9 [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]
- docker pull
//拉取一个nginx的镜像,一下演示的是含有版本号的,如果不指定版本号,拉取最新版本
[root@localhost ~]# docker pull nginx:1.20.2
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
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
//查看镜像
[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
- docker create
//语法格式
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
//创建一个nginx容器,不指定版本号,默认为最新版
[root@localhost ~]# docker create nginx
a590c58c833d4045c48ad325919889123f28968ac255a7b528ef8fed42e3bbf3
//查看是否创建成功
[root@localhost ~]# docker info
......
Server:
Containers: 1 //刚刚创建的nginx容器
Running: 0
Paused: 0
Stopped: 1 //新创建的容器默认是关闭状态
Images: 2 //之前拉取的两个镜像
//以上创建容器时镜像本地有,现在创建本地没有镜像的容器
......
- docker ps
docker ps //只能查看运行中的容器
docker ps -a //查看所有的容器
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a590c58c833d nginx "/docker-entrypoint.…" Less than a second ago Created gifted_haibt
- docker start、stop、restart
//查看ID
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a590c58c833d nginx "/docker-entrypoint.…" Less than a second ago Created gifted_haibt
//使用ID启动
[root@localhost ~]# docker start a590c58c833d
a590c58c833d
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a590c58c833d nginx "/docker-entrypoint.…" Less than a second ago Up 6 seconds 80/tcp gifted_haibt
//重启容器
[root@localhost ~]# docker restart a590c58c833d
a590c58c833d
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a590c58c833d nginx "/docker-entrypoint.…" Less than a second ago Up 6 seconds 80/tcp gifted_haibt
//停止容器
[root@localhost ~]# docker stop a590c58c833d
a590c58c833d
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a590c58c833d nginx "/docker-entrypoint.…" Less than a second ago Exited (0) 3 seconds ago gifted_haibt
- docker kill
kill和stop的区别,kill强制杀死进程,stop正常关闭进程
[root@localhost ~]# docker kill a590c58c833d
a590c58c833d
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a590c58c833d nginx "/docker-entrypoint.…" Less than a second ago Exited (137) 2 seconds ago gifted_haibt
- docker run
//直接运行一个容器,若本地没有镜像,网上拉取
[root@192 ~]# docker run -it busybox /bin/sh
/ # ls
bin dev etc home proc root sys tmp usr var
/ # ip a
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
6: eth0@if7: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
/ #
//可以看到该容器在运行
[root@192 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c81b18591d2d busybox "/bin/sh" 26 seconds ago Up 26 seconds dreamy_ishizaka
当前台退出时,容器也将停止运行
//运行一个容器在后台运行,本地有httpd的镜像
[root@192 ~]# docker run -d httpd
d3894a9b277f191a2401c1dc90eb5b1cc74fd3316e8a066f6bfa1394b163a221
[root@192 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d3894a9b277f httpd "httpd-foreground" 13 seconds ago Up 13 seconds 80/tcp mystifying_gould
- docker inspect
//查看容器详细信息
[root@192 ~]# docker inspect d3894a9b277f
[
{
"Id": "d3894a9b277f191a2401c1dc90eb5b1cc74fd3316e8a066f6bfa1394b163a221",
"Created": "2021-12-02T03:40:26.107087982Z",
"Path": "httpd-foreground",
"Args": [],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 1709,
"ExitCode": 0,
"Error": "",
"StartedAt": "2021-12-02T03:40:26.535732568Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:ad17c88403e2cedd27963b98be7f04bd3f903dfa7490586de397d0404424936d",
"ResolvConfPath": "/var/lib/docker/containers/d3894a9b277f191a2401c1dc90eb5b1cc74fd3316e8a066f6bfa1394b163a221/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/d3894a9b277f191a2401c1dc90eb5b1cc74fd3316e8a066f6bfa1394b163a221/hostname",
"HostsPath": "/var/lib/docker/containers/d3894a9b277f191a2401c1dc90eb5b1cc74fd3316e8a066f6bfa1394b163a221/hosts",
"LogPath": "/var/lib/docker/containers/d3894a9b277f191a2401c1dc90eb5b1cc74fd3316e8a066f6bfa1394b163a221/d3894a9b277f191a2401c1dc90eb5b1cc74fd3316e8a066f6bfa1394b163a221-json.log",
"Name": "/mystifying_gould",
"RestartCount": 0,
"Driver": "overlay2",
"Platform": "linux",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "",
"ExecIDs": null,
"HostConfig": {
"Binds": null,
"ContainerIDFile": "",
"LogConfig": {
"Type": "json-file",
"Config": {}
},
"NetworkMode": "default",
"PortBindings": {},
"RestartPolicy": {
"Name": "no",
"MaximumRetryCount": 0
},
"AutoRemove": false,
"VolumeDriver": "",
"VolumesFrom": null,
"CapAdd": null,
"CapDrop": null,
"CgroupnsMode": "host",
"Dns": [],
"DnsOptions": [],
"DnsSearch": [],
"ExtraHosts": null,
"GroupAdd": null,
"IpcMode": "private",
"Cgroup": "",
"Links": null,
"OomScoreAdj": 0,
"PidMode": "",
"Privileged": false,
"PublishAllPorts": false,
"ReadonlyRootfs": false,
"SecurityOpt": null,
"UTSMode": "",
"UsernsMode": "",
"ShmSize": 67108864,
"Runtime": "runc",
"ConsoleSize": [
0,
0
],
"Isolation": "",
"CpuShares": 0,
"Memory": 0,
"NanoCpus": 0,
"CgroupParent": "",
"BlkioWeight": 0,
"BlkioWeightDevice": [],
"BlkioDeviceReadBps": null,
"BlkioDeviceWriteBps": null,
"BlkioDeviceReadIOps": null,
"BlkioDeviceWriteIOps": null,
"CpuPeriod": 0,
"CpuQuota": 0,
"CpuRealtimePeriod": 0,
"CpuRealtimeRuntime": 0,
"CpusetCpus": "",
"CpusetMems": "",
"Devices": [],
"DeviceCgroupRules": null,
"DeviceRequests": null,
"KernelMemory": 0,
"KernelMemoryTCP": 0,
"MemoryReservation": 0,
"MemorySwap": 0,
"MemorySwappiness": null,
"OomKillDisable": false,
"PidsLimit": null,
"Ulimits": null,
"CpuCount": 0,
"CpuPercent": 0,
"IOMaximumIOps": 0,
"IOMaximumBandwidth": 0,
"MaskedPaths": [
"/proc/asound",
"/proc/acpi",
"/proc/kcore",
"/proc/keys",
"/proc/latency_stats",
"/proc/timer_list",
"/proc/timer_stats",
"/proc/sched_debug",
"/proc/scsi",
"/sys/firmware"
],
"ReadonlyPaths": [
"/proc/bus",
"/proc/fs",
"/proc/irq",
"/proc/sys",
"/proc/sysrq-trigger"
]
},
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/07c5a55fe46a4e574b67cf6ddd8227b1fff0a75dd42c8d1e797dc856f8e748ae-init/diff:/var/lib/docker/overlay2/38871ca6ecdf79195769202c291f69a2a4e8debadaea07a3931c22939c9054a9/diff:/var/lib/docker/overlay2/c9d15bd3e9a8c91a3458e7aee11470dbc6053307de862a37a97b0cd6e57386ac/diff:/var/lib/docker/overlay2/97add0df15747da6893565b07b63e48a4ada6b11dbaf6784545eec3f2918f333/diff:/var/lib/docker/overlay2/148dd89935991b314194a0dc25ff448f2994fd8cf817ef8613b63f5cd56d6cda/diff:/var/lib/docker/overlay2/5f7e1a1f1ccd0c5118dc23f3836abf31f2ce3186d006ca66aa17755ca8790232/diff",
"MergedDir": "/var/lib/docker/overlay2/07c5a55fe46a4e574b67cf6ddd8227b1fff0a75dd42c8d1e797dc856f8e748ae/merged",
"UpperDir": "/var/lib/docker/overlay2/07c5a55fe46a4e574b67cf6ddd8227b1fff0a75dd42c8d1e797dc856f8e748ae/diff",
"WorkDir": "/var/lib/docker/overlay2/07c5a55fe46a4e574b67cf6ddd8227b1fff0a75dd42c8d1e797dc856f8e748ae/work"
},
"Name": "overlay2"
},
"Mounts": [],
"Config": {
"Hostname": "d3894a9b277f",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"80/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/apache2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"HTTPD_PREFIX=/usr/local/apache2",
"HTTPD_VERSION=2.4.51",
"HTTPD_SHA256=20e01d81fecf077690a4439e3969a9b22a09a8d43c525356e863407741b838f4",
"HTTPD_PATCHES="
],
"Cmd": [
"httpd-foreground"
],
"Image": "httpd",
"Volumes": null,
"WorkingDir": "/usr/local/apache2",
"Entrypoint": null,
"OnBuild": null,
"Labels": {},
"StopSignal": "SIGWINCH"
},
"NetworkSettings": {
"Bridge": "",
"SandboxID": "73c6fc741e8dffecd8f116c4603f14379d73e064713894012db6c7c17996cd73",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {
"80/tcp": null
},
"SandboxKey": "/var/run/docker/netns/73c6fc741e8d",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "88cf485fdffff872264619a59a747f7a7a7280dbc332921d75dc151d7642201d",
"Gateway": "172.17.0.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"MacAddress": "02:42:ac:11:00:02",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "58c1d3fef14fdea591aa30adda6277e75330a3a8cf6063d15a792e7dedc18693",
"EndpointID": "88cf485fdffff872264619a59a747f7a7a7280dbc332921d75dc151d7642201d",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2", //IP地址
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:02",
"DriverOpts": null
}
}
}
}
]
//尝试访问httpd
[root@192 ~]# curl 172.17.0.2
<html><body><h1>It works!</h1></body></html>
- docker logs
[root@192 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d3894a9b277f httpd "httpd-foreground" 5 minutes ago Up 5 minutes 80/tcp mystifying_gould
//测试日志功能,多次访问httpd,查看日志是否记录
[root@192 ~]# docker logs d3894a9b277f
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
[Thu Dec 02 03:40:26.563516 2021] [mpm_event:notice] [pid 1:tid 140141847424320] AH00489: Apache/2.4.51 (Unix) configured -- resuming normal operations
[Thu Dec 02 03:40:26.569965 2021] [core:notice] [pid 1:tid 140141847424320] AH00094: Command line: 'httpd -D FOREGROUND'
172.17.0.1 - - [02/Dec/2021:03:43:42 +0000] "GET / HTTP/1.1" 200 45
172.17.0.1 - - [02/Dec/2021:03:45:58 +0000] "GET / HTTP/1.1" 200 45
172.17.0.1 - - [02/Dec/2021:03:45:59 +0000] "GET / HTTP/1.1" 200 45
172.17.0.1 - - [02/Dec/2021:03:46:00 +0000] "GET / HTTP/1.1" 200 45
172.17.0.1 - - [02/Dec/2021:03:46:00 +0000] "GET / HTTP/1.1" 200 45
172.17.0.1 - - [02/Dec/2021:03:46:01 +0000] "GET / HTTP/1.1" 200 45
172.17.0.1 - - [02/Dec/2021:03:46:01 +0000] "GET / HTTP/1.1" 200 45
- docker rm
docker rm 只能删除不在运行的容器,若想删除正在运行的容器需要添加-f 选项
[root@192 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d3894a9b277f httpd "httpd-foreground" 9 minutes ago Up 9 minutes 80/tcp mystifying_gould
[root@192 ~]# docker rm -f d3894a9b277f
d3894a9b277f
[root@192 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
//同时删除多个不在运行的容器
[root@192 ~]# docker rm $(docker ps -aq)
cab00aa31132
8dbdfec69733
7d9b1d050434
1ab91e1de56e
c81b18591d2d
6fa95fc70923
a590c58c833d
- docker attach
进入容器在前台运行,但是任何操作都无效,只能使用ctrl+c强制退出容器,退出容器后容器也将不在运行 - docker exec
进入正在运行的容器,可以进行操作,退出容器后容器也会继续运行
[root@192 ~]# docker exec -it 5780253714ae /bin/sh
# ls
bin build cgi-bin conf error htdocs icons include logs modules
# cd build
# exit
[root@192 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5780253714ae httpd "httpd-foreground" 5 minutes ago Up About a minute 80/tcp pensive_mcclintock