文章目录
- docker容器
- CGroups
- LXC
- OCI&OCF
- docker架构
- docker镜像与镜像仓库
- docker对象
- 安装及使用docker
- docker安装
- docker加速
- docker常用操作
- 用法:
- 1、docker search :在官方仓库搜索镜像
- 2、docker images:查看镜像信息
- 3、docker pull:拉镜像
- 4、docker create:创建容器
- 5、docker ps:查看容器
- 6、docker start:启动容器
- 7、docker inspect:查看容器/镜像的详细信息
- 8、docker restart:重启容器
- 9、docker stop:停止容器
- 10、docker kill:杀死容器
- 11、docker info:显示系统的信息
- 12、docker run:运行容器
- 13、docker logs:查看容器日志
- 14、docker rm:删除容器
- 删除正在运行的容器 :docker rm -f 容器名字
- 15、docker attach:执行容器
- 16、docker exec:执行容器
- attach与 exec的区别:
- docker event state
docker容器
docker是管理容器的一个工具
什么是容器?
当谈到容器化技术时,Docker 是最著名和广泛使用的工具之一。Docker 是一个开源平台,用于快速构建、打包和部署应用程序的容器。它允许开发人员将应用程序及其所有依赖项打包到一个独立的、可移植的容器中,然后在任何环境中运行。
传统虚拟化与容器的区别:
- 资源隔离:传统虚拟化技术使用虚拟机(VM)来实现,每个虚拟机都有自己的操作系统和内核,可以完全隔离和独立运行。而容器是在宿主机操作系统上运行的,多个容器共享同一个内核,但每个容器都有自己的文件系统、进程空间和网络接口。
- 启动速度:由于容器共享宿主机的内核和操作系统,容器的启动速度比虚拟机快得多。虚拟机需要启动自己的操作系统和内核,而容器只需要启动容器运行时,可以在几秒钟内完成。
- 资源利用率:传统虚拟化技术在每个虚拟机上都需要运行一个完整的操作系统和内核,这会占用较多的资源。而容器共享宿主机的操作系统和内核,可以更高效地利用资源,使得容器的密度更高。
- 系统依赖性:由于传统虚拟机是完全独立的,可以运行不同的操作系统和应用程序。而容器需要依赖宿主机的操作系统和内核,因此容器只能运行与宿主机相同的操作系统。
- 管理和部署:传统虚拟化技术需要使用虚拟机管理器(如VMware、Hyper-V等)来管理和部署虚拟机。而容器可以使用容器管理平台(如Docker、Kubernetes等)来管理和部署容器,提供了更方便的管理和部署方式。
总:传统虚拟化适用于需要完全隔离和独立运行的场景,而容器适用于需要高效利用资源和快速部署的场景。
虚拟化分为以下两类:
- 主机级虚拟化
- 全虚拟化
- 半虚拟化
- 容器级虚拟化
容器分离开的资源:
- UTS(主机名与域名)
- Mount(文件系统挂载树)
- IPC
- PID进程树
- User
- Network(tcp/ip协议栈)
CGroups
控制组(CGroups)是Linux内核的一个特性,用来对共享资源进行隔离、限制、审计等。只有能控制分配到容器的资源,Docker才能避免多个容器同时运行时的系统资源竞争。
控制组可以提供对容器的内存、CPU、磁盘IO等资源进行限制。
CGroups能够限制的资源有:
- blkio:块设备IO
- cpu:CPU
- cpuacct:CPU资源使用报告
- cpuset:多处理器平台上的CPU集合
- devices:设备访问
- freezer:挂起或恢复任务
- memory:内存用量及报告
- perf_event:对cgroup中的任务进行统一性能测试
- net_cls:cgroup中的任务创建的数据报文的类别标识符
具体来看,控制组提供如下功能:
- 资源限制(Resource Limitting)组可以设置为不超过设定的内存限制。比如:内存子系统可以为进行组设定一个内存使用上限,一旦进程组使用的内存达到限额再申请内存,就会发出Out of Memory警告
- 优先级(Prioritization)通过优先级让一些组优先得到更多的CPU等资源
- 资源审计(Accounting)用来统计系统实际上把多少资源用到合适的目的上,可以使用cpuacct子系统记录某个进程组使用的CPU时间
- 隔离(Isolation)为组隔离命名空间,这样一个组不会看到另一个组的进程、网络连接和文件系统
- 控制(Control)挂起、恢复和重启等操作
安装Docker后,用户可以在/sys/fs/cgroup/memory/docker/
目录下看到对Docker组应用的各种限制项,包括
[root@localhost ~]# cd /sys/fs/cgroup/memory/
[root@localhost memory]# ls
cgroup.clone_children memory.kmem.slabinfo memory.memsw.limit_in_bytes memory.swappiness
cgroup.event_control memory.kmem.tcp.failcnt memory.memsw.max_usage_in_bytes memory.usage_in_bytes
cgroup.procs memory.kmem.tcp.limit_in_bytes memory.memsw.usage_in_bytes memory.use_hierarchy
cgroup.sane_behavior memory.kmem.tcp.max_usage_in_bytes memory.move_charge_at_immigrate notify_on_release
memory.failcnt memory.kmem.tcp.usage_in_bytes memory.numa_stat release_agent
memory.force_empty memory.kmem.usage_in_bytes memory.oom_control system.slice
memory.kmem.failcnt memory.limit_in_bytes memory.pressure_level tasks
memory.kmem.limit_in_bytes memory.max_usage_in_bytes memory.soft_limit_in_bytes user.slice
memory.kmem.max_usage_in_bytes (内存限制:此处使用字节) memory.memsw.failcnt memory.stat
LXC
通过传统方式使用容器功能的话需要我们自己写代码去进行系统调用来实现创建内核,实际上拥有此能力的人廖廖无几。而LXC(LinuX Container)把容器技术做得更加易用,把需要用到的容器功能做成一组工具,从而极大的简化用户使用容器技术的麻烦程度。
LXC是最早一批真正把完整的容器技术用一组简易使用的工具和模板来极大的简化了容器技术使用的一个方案。
LXC虽然极大的简化了容器技术的使用,但比起直接通过内核调用来使用容器技术,其复杂程度其实并没有多大降低,因为我们必须要学会LXC的一组命令工具,且由于内核的创建都是通过命令来实现的,通过批量命令实现数据迁移并不容易。其隔离性也没有虚拟机那么强大。
后来就出现了docker,所以从一定程度上来说,docker就是LXC的增强版。
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 is a CLI tool for spawning and running containers according to the OCI specification
- Containers are started as a child process of runC and can be embedded into various other systems without having to run a daemon
- runC is built on libcontainer, the same container technology powering millions of Docker Engine installations
docker提供了一个专门容纳容器镜像的站点:https://hub.docker.com
docker架构
docker镜像与镜像仓库
为什么镜像仓库名字是Registry而不是repository?在docker中仓库的名字是以应用的名称取名的。
镜像是静态的,而容器是动态的,容器有其生命周期,镜像与容器的关系类似于程序与进程的关系。镜像类似于文件系统中的程序文件,而容器则类似于将一个程序运行起来的状态,也即进程。所以容器是可以删除的,容器被删除后其镜像是不会被删除的。
docker对象
When you use docker, you are creating and using images, containers, networks, volumes, pluginns, and other objects.
- IMAGES
- An image is a read-only template with instructions for creating a docker container.
- Often, an image is based on another image, with some additional customization.
- You might create your own images or you might only use those created by others and published in a registry.
- CONTAINERS
- A conntainer is a runnable instance of an image.
- You can create, run, stop, move, or delete a container using the docker API or CLI.
- You can connect a container to one or more networks, attach storage to it, or even create a new image based on its current state.
安装及使用docker
docker安装
首先准备一台主机(初始化) 内存8g 处理器 4
主机 | ip |
---|---|
centos8 | 192.168.134.155 |
//下载docker专属安装源
[root@centos ~]# cd /etc/yum.repos.d/
[root@centos yum.repos.d]# curl -o docker-ce.repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
[root@centos yum.repos.d]# sed -i 's@https://download.docker.com@https://mirrors.tuna.tsinghua.edu.cn/docker-ce@g' docker-ce.repo //此动作是将docker-ce.repo里面的地址替换成国内的地址
//如下:
[root@centos yum.repos.d]# head docker-ce.repo
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/$releasever/$basearch/stable #将此处做了替换
enabled=1
gpgcheck=1
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/gpg
[docker-ce-stable-debuginfo]
name=Docker CE Stable - Debuginfo $basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/$releasever/debug-$basearch/stable
//安装docker
[root@centos yum.repos.d]# yum -y install docker-ce
docker加速
(因为此处镜像仓库在国外,拉镜像就会非常慢,所以给他一个加速器)
docker-ce的配置文件是/etc/docker/daemon.json,此文件默认不存在,需要我们手动创建并进行配置,而docker的加速就是通过配置此文件来实现的。
docker的加速有多种方式:
- docker cn
- 中国科技大学加速器
- 阿里云加速器(需要通过阿里云开发者平台注册帐号,免费使用个人私有的加速器)
//安装之后将docker设置开机自启
[root@centos ~]# systemctl enable --now docker
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.
[root@centos ~]# ls /etc/docker/
[root@centos ~]# //此时为空
//在/etc/docker/daemon.json中添加
[root@centos ~]# sudo tee /etc/docker/daemon.json <<-'EOF'
> {
> "registry-mirrors": ["https://4wy8rlcn.mirror.aliyuncs.com"]
> }
> EOF
[root@centos ~]# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://4wy8rlcn.mirror.aliyuncs.com"]
}
//重启一下
[root@centos ~]# systemctl restart docker
//查看
[root@centos ~]# docker info
Insecure Registries:
127.0.0.0/8
Registry Mirrors:
https://4wy8rlcn.mirror.aliyuncs.com/ #能看到此处有这个就说明加速器配置成功
Live Restore Enabled: false
查看版本号
[root@centos ~]# docker version
Client: Docker Engine - Community (客户端)
Version: 24.0.7 #版本号
API version: 1.43
Go version: go1.20.10
Git commit: afdd53b
Built: Thu Oct 26 09:09:18 2023
OS/Arch: linux/amd64
Context: default
Server: Docker Engine - Community (服务端)
Engine:
Version: 24.0.7 #版本号
API version: 1.43 (minimum version 1.12)
Go version: go1.20.10
Git commit: 311b9ff
Built: Thu Oct 26 09:08:20 2023
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.24
GitCommit: 61f9fd88f79f081d64d6fa3bb1a0dc71ec870523
runc:
Version: 1.1.9
GitCommit: v1.1.9-0-gccaecfc
docker-init:
Version: 0.19.0
GitCommit: de40ad0
docker常用操作
命令 | 功能 |
---|---|
docker search | Search the Docker Hub for images(在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 run | Run a command in a new container(在新容器中运行命令) |
docker attach | Attach to a runninng container(连接到运行的容器上) |
docker ps | List containers(列表容器) |
docker logs | Fetch the logs of a container(获取容器的日志) |
docker restart | Restart a container(重新启动容器) |
docker stop | Stop one or more running containers(停止一个或多个运行中的容器) |
docker kill | Kill one or more running containers(杀死一个或多个正在运行的容器) |
docker rm | Remove onne or more containers(移除一个或多个容器) |
docker exec | Run a command in a running container(在正在运行的容器中运行命令) |
docker info | Display system-wide information(显示系统范围的信息) |
docker inspect | Return low-level information on Docker objects(返回Docker对象的底层信息) |
用法:
1、docker search :在官方仓库搜索镜像
[root@centos ~]# docker search httpd
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
httpd The Apache HTTP Server Project 4585 [OK](此处ok表示他是官方的)
2、docker images:查看镜像信息
[root@centos ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
3、docker pull:拉镜像
[root@centos ~]# docker pull httpd
Using default tag: latest
latest: Pulling from library/httpd
a2abf6c4d29d: Pull complete
dcc4698797c8: Pull complete
41c22baa66ec: Pull complete
67283bbdd4a0: Pull complete
d982c879c57e: Pull complete
Digest: sha256:0954cc1af252d824860b2c5dc0a10720af2b7a3d3435581ca788dff8480c7b32
Status: Downloaded newer image for httpd:latest
docker.io/library/httpd:latest
//查看一下
[root@centos ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd latest dabbfbe0c57b 22 months ago 144MB #发现此处有镜像信息
4、docker create:创建容器
//创建容器取名为web 使用httpd这个镜像
[root@centos ~]# docker create --name web httpd
c153c5a8fe4f99e965b47b93e64852a6e581fd288daf3bd228438a2d4c1da21e
5、docker ps:查看容器
//-a:查看所有镜像
[root@centos ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c153c5a8fe4f httpd "httpd-foreground" About a minute ago Created web
6、docker start:启动容器
#docker start 容器名/容器id
[root@centos ~]# docker start c153c5a8fe4f
c153c5a8fe4f
//查看容器
[root@centos ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c153c5a8fe4f httpd "httpd-foreground" 11 minutes ago Up 4 minutes 80/tcp web //此处的80端口号是容器的端口号
要是想在虚拟机上面访问主机的这个网页
//先查看docker的ip地址
[root@centos ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 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
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:14:ea:e9 brd ff:ff:ff:ff:ff:ff
inet 192.168.134.155/24 brd 192.168.134.255 scope global dynamic noprefixroute ens160
valid_lft 1637sec preferred_lft 1637sec
inet6 fe80::20c:29ff:fe14:eae9/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:a4:cc:76:74 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0 #此处为容器的源ip
valid_lft forever preferred_lft forever
inet6 fe80::42:a4ff:fecc:7674/64 scope link
valid_lft forever preferred_lft forever
5: vethd75c8cf@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
link/ether 36:01:f8:59:4e:12 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet6 fe80::3401:f8ff:fe59:4e12/64 scope link
valid_lft forever preferred_lft forever
//创建的第一个容器的ip为172.17.0.2
[root@centos ~]# curl 172.17.0.2
<html><body><h1>It works!</h1></body></html>
//可以访问
此处的ip也可以通过
7、docker inspect:查看容器/镜像的详细信息
#docker inspect 容器名字/镜像名字
[root@centos ~]# docker inspect web
...在最后面
"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
}
}
}
}
]
8、docker restart:重启容器
#docker restart 容器名字
[root@centos ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c153c5a8fe4f httpd "httpd-foreground" 25 minutes ago Up 19 minutes(此处显示他在19分钟之前启动) 80/tcp web
[root@centos ~]# docker restart web
web
[root@centos ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c153c5a8fe4f httpd "httpd-foreground" 25 minutes ago Up 3 seconds(重启在3秒之前) 80/tcp web
9、docker stop:停止容器
#docker stop 容器名字
[root@centos ~]# docker stop web
web
[root@centos ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES //发现上面也没有
[root@centos ~]# docker ps -a //表示看所有容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c153c5a8fe4f httpd "httpd-foreground" 28 minutes ago Exited (0) 8 seconds ago web
10、docker kill:杀死容器
#docker kill 容器名字 :当用stop停不掉的时候可以用这个
[root@centos ~]# docker kill web
web
[root@centos ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@centos ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c153c5a8fe4f httpd "httpd-foreground" 32 minutes ago Exited (137) 2 minutes ago web
//此处的137是不正常的参数
11、docker info:显示系统的信息
[root@centos ~]# docker info
Client: Docker Engine - Community
Version: 24.0.7
Context: default
Debug Mode: false
Plugins:
buildx: Docker Buildx (Docker Inc.)
Version: v0.11.2
Path: /usr/libexec/docker/cli-plugins/docker-buildx
compose: Docker Compose (Docker Inc.)
Version: v2.21.0
Path: /usr/libexec/docker/cli-plugins/docker-compose
Server:
Containers: 1
Running: 0
Paused: 0
Stopped: 1
Images: 1
Server Version: 24.0.7
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Using metacopy: false
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 runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 61f9fd88f79f081d64d6fa3bb1a0dc71ec870523
runc version: v1.1.9-0-gccaecfc
init version: de40ad0
Security Options:
seccomp
Profile: builtin
Kernel Version: 4.18.0-305.el8.x86_64
Operating System: Red Hat Enterprise Linux 8.4 (Ootpa)
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 8.125GiB
Name: centos
ID: 93dd2afb-f6d7-4e21-a333-5dcd94031e1b
Docker Root Dir: /var/lib/docker
Debug Mode: false
Experimental: false
Insecure Registries:
127.0.0.0/8
Registry Mirrors:
https://4wy8rlcn.mirror.aliyuncs.com/
Live Restore Enabled: false
12、docker run:运行容器
//docker run --name(取名字为ww) ww -p(做端口映射《将容器的(第二个80)80映射到虚拟机上为80端口) 80:80 httpd(使用httpd这个镜像启动)
[root@centos ~]# docker run --name ww -p 80:80 httpd
//查看端口号发现端口号运行起来了
[root@centos ~]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 0.0.0.0:80 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 128 [::]:80 [::]:*
//用虚拟机的ip直接访问
发现访问网页成功
//在虚拟机上查看发现防火墙和selinux没关闭 但是依旧可以访问网页
因为:此处访问的网页是容器ww的页面,不受虚拟机的限制
[root@centos ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2023-11-08 02:07:34 CST; 1h 35min ago
Docs: man:firewalld(1)
Main PID: 992 (firewalld)
Tasks: 2 (limit: 53008)
Memory: 35.7M
CGroup: /system.slice/firewalld.service
└─992 /usr/libexec/platform-python -s /usr/sbin/firewalld --nofork --nopid
Nov 08 02:07:36 centos firewalld[992]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -D FORWARD -i >
Nov 08 02:09:46 centos firewalld[992]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -t nat -D OUTP>
Nov 08 02:09:46 centos firewalld[992]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -t nat -D PRER>
Nov 08 02:09:46 centos firewalld[992]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -t nat -D OUTP>
Nov 08 02:09:46 centos firewalld[992]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -t filter -X D>
Nov 08 02:09:46 centos firewalld[992]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -t filter -X D>
[root@centos ~]# getenforce
Enforcing
-d:在后台跑
//运行一个名叫ww1的容器将其容器的80端口映射到8080端口上,并启用httpd的镜像
[root@centos ~]# docker run -d --name ww1 -p 8080:80 httpd
76ca2f0edafb08c0163a4c2faaf7dcc98e13a0b8ed484559b581f757a096fda7
[root@centos ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
76ca2f0edafb httpd "httpd-foreground" 5 seconds ago Up 4 seconds 0.0.0.0:8080->80/tcp, :::8080->80/tcp ww1
[root@centos ~]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 0.0.0.0:8080 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 128 [::]:8080 [::]:*
//访问
13、docker logs:查看容器日志
#docker logs 容器名
[root@centos ~]# docker logs ww1
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
[Tue Nov 07 19:49:55.229999 2023] [mpm_event:notice] [pid 1:tid 140005651692864] AH00489: Apache/2.4.52 (Unix) configured -- resuming normal operations
[Tue Nov 07 19:49:55.230150 2023] [core:notice] [pid 1:tid 140005651692864] AH00094: Command line: 'httpd -D FOREGROUND'
192.168.134.1 - - [07/Nov/2023:19:51:37 +0000] "GET / HTTP/1.1" 200 45
192.168.134.1 - - [07/Nov/2023:19:51:37 +0000] "GET /favicon.ico HTTP/1.1" 404 196
192.168.134.1 - - [07/Nov/2023:19:52:29 +0000] "-" 408 -
192.168.134.1 - - [07/Nov/2023:19:52:34 +0000] "GET / HTTP/1.1" 304 -
14、docker rm:删除容器
#docker rm 容器名
[root@centos ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
76ca2f0edafb httpd "httpd-foreground" 6 minutes ago Up 6 minutes 0.0.0.0:8080->80/tcp, :::8080->80/tcp ww1
58a2e80a3db3 httpd "httpd-foreground" 19 minutes ago Exited (0) 15 minutes ago ww
c153c5a8fe4f httpd "httpd-foreground" 58 minutes ago Exited (137) 28 minutes ago web
[root@centos ~]# docker rm web
web
[root@centos ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
76ca2f0edafb httpd "httpd-foreground" 6 minutes ago Up 6 minutes 0.0.0.0:8080->80/tcp, :::8080->80/tcp ww1
58a2e80a3db3 httpd "httpd-foreground" 20 minutes ago Exited (0) 15 minutes ago ww
删除正在运行的容器 :docker rm -f 容器名字
//直接rm命令删除无法删除
[root@centos ~]# docker rm ww1
Error response from daemon: You cannot remove a running container 76ca2f0edafb08c0163a4c2faaf7dcc98e13a0b8ed484559b581f757a096fda7. Stop the container before attempting removal or force remove
//加入-f强制删除
[root@centos ~]# docker rm -f ww1
ww1
[root@centos ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
15、docker attach:执行容器
//首先运行一个名为web的容器
[root@centos ~]# docker run -d --name web httpd
8024bb75bbdcacdfd687554a3a936fb1399046c7637f219d5afd8bb43d022c79
//查看容器
[root@centos ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8024bb75bbdc httpd "httpd-foreground" 7 seconds ago Up 5 seconds 80/tcp web
//执行attach:进入容器
[root@centos ~]# docker attach web
//此时在另一端访问此容器ip 会出现以下信息(只能查看日志)
172.17.0.1 - - [09/Nov/2023:00:37:31 +0000] "GET / HTTP/1.1" 200 45
16、docker exec:执行容器
[root@centos ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8024bb75bbdc httpd "httpd-foreground" 4 minutes ago Exited (0) 5 seconds ago web
[root@centos ~]# docker start web
web
[root@centos ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8024bb75bbdc httpd "httpd-foreground" 5 minutes ago Up 5 seconds 80/tcp web
[root@centos ~]# docker exec -it web /bin/bash
root@8024bb75bbdc:/usr/local/apache2# ls
bin build cgi-bin conf error htdocs icons include logs modules
attach与 exec的区别:
attach
是代表进入容器 ,它附加进入容器 ,没办法进行操作,干不了任何事,只能查看日志,并且不能退出,退出之后容器也会退出
exec
可以直接进入容器做操作,执行命令