docker容器基本操作

发布于:2025-08-15 ⋅ 阅读:(16) ⋅ 点赞:(0)
  1. 安装docker和docker-compose。
  2. 利用docker实现安装NGINX A,搭建Web Server,任意HTML页面,其8080端口提供Web访问服务,截图成功访问http: //[Server1]:8080并且回显Web页面。
  3. Docker基础命令使用
    ○ 搭建docker容器提供服务;
    ○ 操作docker容器(启动、停止、删除、进入容器内部等);
    ○ 查看docker容器详细信息;
    ○ 查看docker容器日志(包含实时查看);
    ○ 查看docker network信息;
    ○ 批量操作docker容器(批量停止、删除等);
    ○ 操作docker images;
    ○ docker 容器内与宿主机互相复制文件;

要求1 离线、在线安装docker

在线安装docker和docker-compose
1、更新软件包
更新Ubuntu软件包列表和已安装软件的版本:

sudo apt update
sudo apt upgrade #如果已安装的软件比较多,此过程会很长,可以取消这个操作

2、安装docker依赖

apt-get install ca-certificates curl gnupg lsb-release

3、添加Docker官方GPG密钥

curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

4、添加Docker软件源

apt-get -y install software-properties-common #安装add-apt-repository命令
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

5、安装docker

apt-get install docker-ce docker-ce-cli containerd.io

6、运行docker

systemctl start docker

7、查看docker的状态

systemctl status docker

安装成功!请添加图片描述
8、安装docker-compose

root@iZ2zei3ltzorcuiiynrsemZ:~# apt-get install docker-compose -y

要求2 在docker中部署nginx应用

1、配置可用的docker镜像加速器

[root@localhost ~]# tee /etc/docker/daemon.json << EOF
> {
>     "registry-mirrors": [
>             "https://docker.211678.top",
>             "https://docker.1panel.live",
>             "https://hub.rat.dev",
>             "https://docker.m.daocloud.io",
>             "https://do.nark.eu.org",
>             "https://dockerpull.com",
>             "https://dockerproxy.cn",
>             "https://docker.awsl9527.cn"
>       ]
> }
> EOF

2、拉取nginx服务的镜像

[root@localhost ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
b1badc6e5066: Pull complete
c5ada5e7d698: Pull complete
9dbfe0b105c9: Pull complete
dea1652b095a: Pull complete
85003794a6a5: Pull complete
fea7cebc499c: Pull complete
856c000ad0ec: Pull complete
Digest: sha256:6fc1fffefda00b22ecc896f9c5e532006484b3938a240478c767658f9df9297b
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest

[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        latest    7a073be66c4c   4 weeks ago   192MB

3、启动nginx容器并测试
-it 以交互式的方式运行该容器
‘- -name’ 给容器起名
‘-p 宿主机映射端口:容器服务端口’ 将宿主机端口映射到容器的服务端口,客户端可通过该端口访问容器应用

[root@localhost ~]# docker run -it --name nginx_A -p 8080:80 nginx:latest /bin/bash
查看nginx可执行文件路径
root@9837e53877e4:/# which nginx
/usr/sbin/nginx
启动nginx服务
root@9837e53877e4:/# nginx
2025/08/14 03:34:45 [notice] 9#9: using the "epoll" event method
2025/08/14 03:34:45 [notice] 9#9: nginx/1.29.0
2025/08/14 03:34:45 [notice] 9#9: built by gcc 12.2.0 (Debian 12.2.0-14+deb12u1)
2025/08/14 03:34:45 [notice] 9#9: OS: Linux 3.10.0-1160.el7.x86_64
2025/08/14 03:34:45 [notice] 9#9: getrlimit(RLIMIT_NOFILE): 1048576:1048576
root@9837e53877e4:/# 2025/08/14 03:34:45 [notice] 10#10: start worker processes
2025/08/14 03:34:45 [notice] 10#10: start worker process 11

另开一个终端
查看运行容器的详细信息
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                                   NAMES
9837e53877e4   nginx:latest   "/docker-entrypoint.…"   21 minutes ago   Up 21 minutes   0.0.0.0:8080->80/tcp, :::8080->80/tcp   nginx_A
访问测试
[root@localhost ~]# curl localhost:8080

在这里插入图片描述
可以在nginx容器端查看到客户端的连接信息
在这里插入图片描述
要求3.Docker基础命令使用
1、搭建docker容器提供服务;

举例:通过nginx:latest构建自定义镜像

#在宿主机上编辑访问页面,复制到容器中
[root@localhost ~]#  echo "This is a test page" > index.html

创建dockerfile文件
[root@localhost ~]# vim Dockerfile
FROM nginx:latest
ENV TZ=Asia/Shanghai \
    NGINX_ENV=production

RUN rm -rf /usr/share/nginx/html/index.html
COPY ./index.html /usr/share/nginx/html/

HEALTHCHECK --interval=30s --timeout=3s \
    CMD curl -f http://localhost || exit 1
EXPOSE 80
CMD ["nginx","-g","daemon off;"]

#构建镜像
[root@localhost ~]# docker build -t nginx-b .
Sending build context to Docker daemon  1.066GB
Step 1/7 : FROM nginx:latest
 ---> 7a073be66c4c
Step 2/7 : ENV TZ=Asia/Shanghai     NGINX_ENV=production
 ---> Running in 34677d5ad718
Removing intermediate container 34677d5ad718
 ---> 3fed3eaab88d
Step 3/7 : RUN rm -rf /usr/share/nginx/html/index.html
 ---> Running in fff37f7653e8
Removing intermediate container fff37f7653e8
 ---> 7371377ca0c5
Step 4/7 : COPY ./index.html /usr/share/nginx/html/
 ---> 5d87c15f2acc
Step 5/7 : HEALTHCHECK --interval=30s --timeout=3s     CMD curl -f http://localhost || exit 1
 ---> Running in a9ad91a19bbd
Removing intermediate container a9ad91a19bbd
 ---> a8e86f23ef02
Step 6/7 : EXPOSE 80
 ---> Running in 8d230c7f43a8
Removing intermediate container 8d230c7f43a8
 ---> 55b992c31fc3
Step 7/7 : CMD ["nginx","-g","daemon off;"]
 ---> Running in 1b8e445be1fa
Removing intermediate container 1b8e445be1fa
 ---> 0ca33b1656ba
Successfully built 0ca33b1656ba
Successfully tagged nginx-b:latest

#查看构建的镜像
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
nginx-b      latest    0ca33b1656ba   17 seconds ago   192MB
nginx        latest    7a073be66c4c   4 weeks ago      192MB

2、操作docker容器(启动、停止、删除、进入容器内部等);

①启动通过Dockerfile构建的镜像nginx-b

[root@localhost ~]# docker run -d -p 8080:80 nginx-b
451c8027c9a49c065b8ec96b50b175ad34e0c8652de09ff09f3eebc85c9ce48b
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS                            PORTS                                   NAMES
451c8027c9a4   nginx-b   "/docker-entrypoint.…"   4 seconds ago   Up 3 seconds (health: starting)   0.0.0.0:8080->80/tcp, :::8080->80/tcp   blissful_euclid
[root@localhost ~]# curl http://localhost:8080
This is a test page

②进入容器内部

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED              STATUS                        PORTS                                   NAMES
451c8027c9a4   nginx-b   "/docker-entrypoint.…"   About a minute ago   Up About a minute (healthy)   0.0.0.0:8080->80/tcp, :::8080->80/tcp   blissful_euclid
[root@localhost ~]# docker exec -it 451 /bin/bash
root@451c8027c9a4:/# cat /usr/share/nginx/html/index.html
This is a test page

③停止容器

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED       STATUS                            PORTS                                   NAMES
451c8027c9a4   nginx-b   "/docker-entrypoint.…"   4 hours ago   Up 3 seconds (health: starting)   0.0.0.0:8080->80/tcp, :::8080->80/tcp   blissful_euclid
[root@localhost ~]# docker stop  blissful_euclid #指定要删除的运行中的容器名
blissful_euclid
[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
451c8027c9a4   nginx-b   "/docker-entrypoint.…"   4 hours ago   Exited (0) 14 seconds ago             blissful_euclid

④删除容器

[root@localhost ~]# docker rm 451
451
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

3、查看docker容器详细信息;

[root@localhost ~]# docker inspect 451  通过该命令可看到容器的所有信息
[
    {
        "Id": "451c8027c9a49c065b8ec96b50b175ad34e0c8652de09ff09f3eebc85c9ce48b",
        "Created": "2025-08-14T05:52:52.817697932Z",
        "Path": "/docker-entrypoint.sh",
        "Args": [
            "nginx",
            "-g",
            "daemon off;"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 10719,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2025-08-14T05:52:53.070401569Z",
            "FinishedAt": "0001-01-01T00:00:00Z",
            "Health": {
                "Status": "healthy",
                "FailingStreak": 0,
                "Log": [
                    {
                        "Start": "2025-08-14T13:55:23.412460874+08:00",
                        "End": "2025-08-14T13:55:23.474093821+08:00",
                        "ExitCode": 0,
                        "Output": "  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\n                                 Dload  Upload   Total   Spent    Left  Speed\n\r  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0\r100    20  100    20    0     0  36630      0 --:--:-- --:--:-- --:--:-- 20000\nThis is a test page\n"
                    },
......................................................................

如果要指定查看该容器的某些信息,可以使用{{.参数}}的方式

例如:

docker inspect --format $'容器ID: {{.Id}}\n容器名: {{.Name}}\n状态: {{.State.Status}}\nIP: {{.NetworkSettings.IPAddress}}' 容器名或ID

4、实时查看docker容器日志;

另开一个终端,通过-f实时查看,另外一个终端不停访问,可看到web连接信息

[root@localhost ~]# docker logs -f 451
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Sourcing /docker-entrypoint.d/15-local-resolvers.envsh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2025/08/14 13:52:53 [notice] 1#1: using the "epoll" event method
2025/08/14 13:52:53 [notice] 1#1: nginx/1.29.0
2025/08/14 13:52:53 [notice] 1#1: built by gcc 12.2.0 (Debian 12.2.0-14+deb12u1)
2025/08/14 13:52:53 [notice] 1#1: OS: Linux 3.10.0-1160.el7.x86_64
2025/08/14 13:52:53 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2025/08/14 13:52:53 [notice] 1#1: start worker processes
2025/08/14 13:52:53 [notice] 1#1: start worker process 29
172.17.0.1 - - [14/Aug/2025:13:53:11 +0800] "GET / HTTP/1.1" 200 20 "-" "curl/7.29.0" "-"
127.0.0.1 - - [14/Aug/2025:13:53:23 +0800] "GET / HTTP/1.1" 200 20 "-" "curl/7.88.1" "-"
127.0.0.1 - - [14/Aug/2025:13:53:53 +0800] "GET / HTTP/1.1" 200 20 "-" "curl/7.88.1" "-"
127.0.0.1 - - [14/Aug/2025:13:54:23 +0800] "GET / HTTP/1.1" 200 20 "-" "curl/7.88.1" "-"
127.0.0.1 - - [14/Aug/2025:13:54:53 +0800] "GET / HTTP/1.1" 200 20 "-" "curl/7.88.1" "-"
127.0.0.1 - - [14/Aug/2025:13:55:23 +0800] "GET / HTTP/1.1" 200 20 "-" "curl/7.88.1" "-"
127.0.0.1 - - [14/Aug/2025:13:55:53 +0800] "GET / HTTP/1.1" 200 20 "-" "curl/7.88.1" "-"
127.0.0.1 - - [14/Aug/2025:13:56:23 +0800] "GET / HTTP/1.1" 200 20 "-" "curl/7.88.1" "-"
127.0.0.1 - - [14/Aug/2025:13:56:53 +0800] "GET / HTTP/1.1" 200 20 "-" "curl/7.88.1" "-"
127.0.0.1 - - [14/Aug/2025:13:57:23 +0800] "GET / HTTP/1.1" 200 20 "-" "curl/7.88.1" "-"
127.0.0.1 - - [14/Aug/2025:13:57:53 +0800] "GET / HTTP/1.1" 200 20 "-" "curl/7.88.1" "-"
127.0.0.1 - - [14/Aug/2025:13:58:23 +0800] "GET / HTTP/1.1" 200 20 "-" "curl/7.88.1" "-"
127.0.0.1 - - [14/Aug/2025:13:58:53 +0800] "GET / HTTP/1.1" 200 20 "-" "curl/7.88.1" "-"
127.0.0.1 - - [14/Aug/2025:13:59:24 +0800] "GET / HTTP/1.1" 200 20 "-" "curl/7.88.1" "-"
172.17.0.1 - - [14/Aug/2025:13:59:38 +0800] "GET / HTTP/1.1" 200 20 "-" "curl/7.29.0" "-"

5、查看docker network信息;

[root@localhost ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
fc7d7e035c51   bridge    bridge    local
40262b0a9d06   host      host      local
de4d437b9434   none      null      local
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS                   PORTS     NAMES
98e72c6de690   nginx-b   "/docker-entrypoint.…"   5 minutes ago   Up 5 minutes (healthy)   80/tcp    thirsty_chandrasekhar
[root@localhost ~]# docker network inspect bridge  #查看bridge网络信息
[
    {
        "Name": "bridge",
        "Id": "fc7d7e035c510b2261f7923c35e749c13fc6667f7cde101a09670eddfbd39e23",
        "Created": "2025-08-14T17:37:48.197890715+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "98e72c6de69087b56f267da8402e3ba321f2809eec6bf70ea1f3872eef3dd788": {
                "Name": "thirsty_chandrasekhar",
                "EndpointID": "ca5b65b7127382f833075fd25a9a39a44b4ba6cfdb5065d6fce1431870698474",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
        },
        "Labels": {}
    }
]
查看连接到bridge网络的容器有哪些
[root@localhost ~]# docker network inspect --format='{{range .Containers}}{{.Name}} {{end}}' bridge
thirsty_chandrasekhar   #容器名

6、批量操作docker容器(批量停止、删除等);

运行多个容器,制造批量条件

[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx-b      latest    0ca33b1656ba   5 hours ago   192MB
nginx        latest    7a073be66c4c   4 weeks ago   192MB
[root@localhost ~]# docker run -d --name nginx-a nginx:latest
ced85afd6b00fff5500598593b2b99b988b4241ff2076e5bea51e684f51ebef4
[root@localhost ~]# docker run -d --name nginx-c nginx:latest
1ec331700d52db3127c7deecaafc33d2e7e47b1092e1209f382229dff9d30527
[root@localhost ~]# docker run -d --name nginx-d nginx:latest
f4ac3cfe1cca22f838d6d74d6a0ed21f110a1a80b07ff612d2a8b4b7376bd018
[root@localhost ~]# docker run -d --name nginx-e nginx:latest
4f212a4abf38233b32acdaa12b80167222164499fd26aa2246215bc5005736f7
[root@localhost ~]# docker run -d --name nginx-f nginx:latest
a92102c5410e0b1d731354488bda49f86acf8e4c84d5e5d83d2788fc54e21c9b
查看运行中的容器
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED              STATUS                    PORTS     NAMES
a92102c5410e   nginx:latest   "/docker-entrypoint.…"   About a minute ago   Up About a minute         80/tcp    nginx-f
4f212a4abf38   nginx:latest   "/docker-entrypoint.…"   About a minute ago   Up About a minute         80/tcp    nginx-e
f4ac3cfe1cca   nginx:latest   "/docker-entrypoint.…"   About a minute ago   Up About a minute         80/tcp    nginx-d
1ec331700d52   nginx:latest   "/docker-entrypoint.…"   About a minute ago   Up About a minute         80/tcp    nginx-c
ced85afd6b00   nginx:latest   "/docker-entrypoint.…"   2 minutes ago        Up 2 minutes              80/tcp    nginx-a
98e72c6de690   nginx-b        "/docker-entrypoint.…"   41 minutes ago       Up 41 minutes (healthy)   80/tcp    thirsty_chandrasekhar

批量停止容器

[root@localhost ~]# docker stop `docker ps -q`
a92102c5410e
4f212a4abf38
f4ac3cfe1cca
1ec331700d52
ced85afd6b00
98e72c6de690
[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
a92102c5410e   nginx:latest   "/docker-entrypoint.…"   4 minutes ago    Exited (0) 8 seconds ago             nginx-f
4f212a4abf38   nginx:latest   "/docker-entrypoint.…"   4 minutes ago    Exited (0) 8 seconds ago             nginx-e
f4ac3cfe1cca   nginx:latest   "/docker-entrypoint.…"   4 minutes ago    Exited (0) 8 seconds ago             nginx-d
1ec331700d52   nginx:latest   "/docker-entrypoint.…"   4 minutes ago    Exited (0) 8 seconds ago             nginx-c
ced85afd6b00   nginx:latest   "/docker-entrypoint.…"   5 minutes ago    Exited (0) 8 seconds ago             nginx-a
98e72c6de690   nginx-b        "/docker-entrypoint.…"   44 minutes ago   Exited (0) 8 seconds ago             thirsty_chandrasekhar

批量删除容器

[root@localhost ~]# docker rm `docker ps -aq`
a92102c5410e
4f212a4abf38
f4ac3cfe1cca
1ec331700d52
ced85afd6b00
98e72c6de690
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

7、 docker 容器内与宿主机互相复制文件;

①将宿主机文件复制到容器中

[root@localhost ~]# echo "2025-08-14" > date.txt
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS     NAMES
24c76d978396   nginx:latest   "/docker-entrypoint.…"   3 minutes ago   Up 3 minutes   80/tcp    nginx-cp
[root@localhost ~]# docker cp ./date.txt nginx-cp:/tmp/  #将宿主机上的文件复制到容器下指定的目录中
[root@localhost ~]# docker exec -it nginx-cp /bin/bash  #进入容器查看复制到容器中的文件
root@24c76d978396:/# cat /tmp/date.txt
2025-08-14

②将宿主机文件复制到宿主机中

root@24c76d978396:/# cd /root/
root@24c76d978396:~# ls
root@24c76d978396:~# echo `hostname -I` > local.txt  #在容器中创建local.txt文件
root@24c76d978396:~# cat local.txt
172.17.0.2
root@24c76d978396:~# exit
exit
[root@localhost ~]# docker cp nginx-cp:/root/local.txt ./    #在宿主机上执行复制命令
[root@localhost ~]# cat local.txt
172.17.0.2

网站公告

今日签到

点亮在社区的每一天
去签到