- 安装docker和docker-compose。
- 利用docker实现安装NGINX A,搭建Web Server,任意HTML页面,其8080端口提供Web访问服务,截图成功访问http: //[Server1]:8080并且回显Web页面。
- 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