docker容器

docker容器

docker是管理容器的一个工具

什么是容器?

当谈到容器化技术时,Docker 是最著名和广泛使用的工具之一。Docker 是一个开源平台,用于快速构建、打包和部署应用程序的容器。它允许开发人员将应用程序及其所有依赖项打包到一个独立的、可移植的容器中,然后在任何环境中运行。

传统虚拟化与容器的区别:

  1. 资源隔离:传统虚拟化技术使用虚拟机(VM)来实现,每个虚拟机都有自己的操作系统和内核,可以完全隔离和独立运行。而容器是在宿主机操作系统上运行的,多个容器共享同一个内核,但每个容器都有自己的文件系统、进程空间和网络接口。
  2. 启动速度:由于容器共享宿主机的内核和操作系统,容器的启动速度比虚拟机快得多。虚拟机需要启动自己的操作系统和内核,而容器只需要启动容器运行时,可以在几秒钟内完成。
  3. 资源利用率:传统虚拟化技术在每个虚拟机上都需要运行一个完整的操作系统和内核,这会占用较多的资源。而容器共享宿主机的操作系统和内核,可以更高效地利用资源,使得容器的密度更高。
  4. 系统依赖性:由于传统虚拟机是完全独立的,可以运行不同的操作系统和应用程序。而容器需要依赖宿主机的操作系统和内核,因此容器只能运行与宿主机相同的操作系统。
  5. 管理和部署:传统虚拟化技术需要使用虚拟机管理器(如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架构

img

docker镜像与镜像仓库

为什么镜像仓库名字是Registry而不是repository?在docker中仓库的名字是以应用的名称取名的。

img

镜像是静态的,而容器是动态的,容器有其生命周期,镜像与容器的关系类似于程序与进程的关系。镜像类似于文件系统中的程序文件,而容器则类似于将一个程序运行起来的状态,也即进程。所以容器是可以删除的,容器被删除后其镜像是不会被删除的。

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
centos8192.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
  • 中国科技大学加速器
  • 阿里云加速器(需要通过阿里云开发者平台注册帐号,免费使用个人私有的加速器)

登录容器镜像服务 (aliyun.com)

在这里插入图片描述

//安装之后将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 searchSearch the Docker Hub for images(在Docker Hub中搜索镜像)
docker pullPull an image or a repository from a registry(从注册表中提取映像或存储库)
docker imagesList images(图片列表)
docker createCreate a new conntainer(创建一个新容器)
docker startStart one or more stopped containers(启动一个或多个已停止的容器)
docker runRun a command in a new container(在新容器中运行命令)
docker attachAttach to a runninng container(连接到运行的容器上)
docker psList containers(列表容器)
docker logsFetch the logs of a container(获取容器的日志)
docker restartRestart a container(重新启动容器)
docker stopStop one or more running containers(停止一个或多个运行中的容器)
docker killKill one or more running containers(杀死一个或多个正在运行的容器)
docker rmRemove onne or more containers(移除一个或多个容器)
docker execRun a command in a running container(在正在运行的容器中运行命令)
docker infoDisplay system-wide information(显示系统范围的信息)
docker inspectReturn 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可以直接进入容器做操作,执行命令

docker event state

img

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker容器是一种轻量级、可移植的虚拟化技术,用于在操作系统级别隔离应用程序和其依赖的运行环境。通过使用Docker容器,可以将应用程序及其所有依赖项打包到一个独立的、可移植的容器中,然后在任何支持Docker的环境中运行。 以下是一些常见的Docker容器相关概念和工具: 1. Docker镜像(Docker Image):Docker镜像是一个只读的模板,包含了运行应用程序所需的所有文件和依赖项。可以通过Docker镜像创建Docker容器。 2. Docker容器Docker Container):Docker容器Docker镜像的运行实例。每个Docker容器都是相互隔离的,具有自己的文件系统、进程空间和网络接口。 3. Docker引擎(Docker Engine):Docker引擎是Docker的核心组件,负责管理和运行Docker容器。它包括了一个守护进程(dockerd)和一组命令行工具(docker命令)。 4. Docker Compose:Docker Compose是一个用于定义和管理多个Docker容器的工具。通过编写一个YAML文件来描述应用程序的各个组件及其依赖关系,然后使用docker-compose命令来启动、停止和管理这些容器。 5. Kubernetes:Kubernetes是一个用于自动化部署、扩展和管理容器化应用程序的开源平台。它可以与Docker结合使用,提供了更高级的容器编排和管理功能。 6. Docker Hub:Docker Hub是一个公共的Docker镜像仓库,可以从中获取各种预构建的Docker镜像。同时,也可以将自己构建的镜像推送到Docker Hub上进行分享和存储。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值