目录
docker容器的四种状态
bash
-Up:
代表的是容器处于运行状态。
-Exited:
表示容器的启动名称被终止,通常情况下,退出状态码为0则容器正常退出,非0表示异常退出。
案例:
root@docker101:~# docker run -d --name c1 jasonyin2020/oldboyedu-linux-tools:v0.1 sleep 10
06ccf49a8cfc13d0ce2952b92846edf01314b64bfd7755879db8190d34353b03
root@docker101:~# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
06ccf49a8cfc jasonyin2020/oldboyedu-linux-tools:v0.1 "sleep 10" 2 seconds ago Up 1 second c1
root@docker101:~# docker ps -l # 观察退出的状态码为0
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
06ccf49a8cfc jasonyin2020/oldboyedu-linux-tools:v0.1 "sleep 10" 11 seconds ago Exited (0) Less than a second ago c1
root@docker101:~# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
11cd4fb3464e jasonyin2020/oldboyedu-linux-tools:v0.1 "sleep 3600" 2 seconds ago Up 1 second c2
root@docker101:~# docker inspect -f "{{.State.Pid}}" c2
3006
root@docker101:~# kill -9 3006 # 观察退出的状态码为非0
root@docker101:~# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
11cd4fb3464e jasonyin2020/oldboyedu-linux-tools:v0.1 "sleep 3600" 45 seconds ago Exited (137) 1 second ago c2
-Created:
表示容器处于创建状态,但是没有启动,需要执行"docker start"命令启动该容器,所以"docker run"等于"docker create + docker start"。
案例:
root@docker101:~# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
42ab49570891 jasonyin2020/oldboyedu-linux-tools:v0.1 "sleep 3600" 3 seconds ago Created c3
root@docker101:~#
root@docker101:~# docker start c3
c3
root@docker101:~#
root@docker101:~# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
42ab49570891 jasonyin2020/oldboyedu-linux-tools:v0.1 "sleep 3600" About a minute ago Up 1 second c3
-Paused:
容器依旧处于运行状态,但是此状态暂停对外服务。(类似于虚拟机被挂起)
重启容器,会对状态的时间重新计时,但暂停后在停止暂停不会
案例:
root@docker101:~# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
63692ba3efe0 registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1 "/docker- entrypoint...." 28 seconds ago Up 27 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp c4
root@docker101:~# docker container pause c4
c4
root@docker101:~# docker ps -l # 注意观察,容器处于Paused状态,不对外提供服务。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
63692ba3efe0 registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1 "/docker- entrypoint...." 45 seconds ago Up 44 seconds (Paused) 0.0.0.0:80->80/tcp, :::80- >80/tcp c4
root@docker101:~# docker container unpause c4
c4
root@docker101:~# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
63692ba3efe0 registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1 "/docker- entrypoint...." 2 minutes ago Up 2 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp c4
root@docker101:~# docker restart c4 # 重启容器,会对状态的时间重新计时,但暂停不会。
c4
root@docker101:~# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
63692ba3efe0 registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1 "/docker- entrypoint...." 3 minutes ago Up 1 second 0.0.0.0:80->80/tcp, :::80->80/tcp c4
查看容器的进程的三种方式
bash
1.在宿主机直接过滤【弊端就是多实例的时候不太好区分具体的容器】
ps -ef | grep 进程名称相关信息
案例:
[root@docker101 ~]#ps -ef | grep nginx
root 27977 1 0 Dec19 ? 00:00:20 runsvdir -P /opt/gitlab/service log: es. svlogd: warning: unable to lock directory: /var/log/gitlab/nginx: temporary failure svlogd: fatal: no functional log directories. svlogd: warning: unable to lock directory: /var/log/gitlab/nginx: temporary failure svlogd: fatal: no functional log directories. svlogd: warning: unable to lock directory: /var/log/gitlab/nginx: temporary failure svlogd: fatal: no functional log directories. .
root 28010 1 0 Dec19 ? 00:00:00 nginx: master process /opt/gitlab/embedded/sbin/nginx -p /var/opt/gitlab/nginx
gitlab-+ 28078 28010 0 Dec19 ? 00:00:00 nginx: worker process
gitlab-+ 28079 28010 0 Dec19 ? 00:00:03 nginx: worker process
gitlab-+ 28080 28010 0 Dec19 ? 00:00:01 nginx: cache manager process
root 49498 27977 0 Dec20 ? 00:01:17 runsv nginx
root 103604 103585 0 14:14 ? 00:00:00 nginx: master process nginx -g daemon off;
2.使用docker inspect查看容器的详细信息
docker inspect -f "{{.State.PID}}" 容器ID
案例:
[root@docker101 ~]#docker inspect -f "{{.State.Pid}}" 138889c4b6e1
103604
3.使用top查看容器的进程ID
docker top 容器ID
案例:
[root@docker101 ~]#docker top c1
UID PID PPID C STIME TTY TIME CMD
root 103604 103585 0 14:14 ? 00:00:00 nginx: master process nginx -g daemon off;
101 103650 103604 0 14:14 ? 00:00:00 nginx: worker process
101 103651 103604 0 14:14 ? 00:00:00 nginx: worker process
基于centos环境手动制作docker镜像
1)导入镜像
bash
[root@docker101 ~]#docker load -i centos.tar.gz
174f56854903: Loading layer [==================================================>] 211.7MB/211.7MB
Loaded image: centos:centos7.9.2009
2)启动centos镜像
bash
[root@docker101 ~]#docker run -it --name c1 centos:centos7.9.2009
[root@d138e6707b0a /]#
3)查看容器和镜像的大小
bash
[root@docker101 /]#docker image ls centos
REPOSITORY TAG IMAGE ID CREATED SIZE
centos centos7.9.2009 eeb6ee3f44bd 4 years ago 204MB
[root@docker101 /]#docker ps -ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES SIZE
d138e6707b0a centos:centos7.9.2009 "/bin/bash" About a minute ago Up About a minute c1 0B (virtual 204MB)
4)开始安装服务
4.1配置nginx官方源
bash
[root@d138e6707b0a /]# cat >/etc/yum.repos.d/nginx.repo<<'EOF'
> [nginx-stable]
> name=nginx stable repo
> baseurl=https://nginx.org/packages/centos/$releasever/$basearch/
> gpgcheck=1
> enabled=1
> gpgkey=https://nginx.org/keys/nginx_signing.key
> module_hotfixes=true
>
> [nginx-mainline]
> name=nginx mainline repo
> baseurl=https://nginx.org/packages/mainline/centos/$releasever/$basearch/
> gpgcheck=1
> enabled=0
> gpgkey=https://nginx.org/keys/nginx_signing.key
> module_hotfixes=true
> EOF
[root@d138e6707b0a /]# cat /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=https://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=https://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
4.2配置yum源并安装nginx服务
bash
[root@d138e6707b0a /]# curl -s -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@d138e6707b0a /]# sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
[root@d138e6707b0a /]# yum -y install nginx
5)再次查看容器大小
bash
[root@docker101 /]#docker ps -ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES SIZE
d138e6707b0a centos:centos7.9.2009 "/bin/bash" 15 minutes ago Up 15 minutes c1 265MB (virtual 469MB)
6)做一些yum的优化策略
bash
[root@d138e6707b0a /]# du -sh /var/cache/yum #查看yum缓存大小
222M /var/cache/yum
[root@d138e6707b0a /]# rm -rf /var/cache/yum #删除yum缓存
[root@d138e6707b0a /]# nginx -t #nginx服务正常
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
再次查看容器大小(小了很多)
[root@docker101 /]#docker ps -ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES SIZE
d138e6707b0a centos:centos7.9.2009 "/bin/bash" 20 minutes ago Up 20 minutes c1 32.2MB (virtual 236MB)
7)准备Nginx的测试数据
7.1删除源文件内容
bash
[root@d138e6707b0a /]# rm -rf /usr/share/nginx/html/*
[root@d138e6707b0a /]# ls -l /usr/share/nginx/html
total 0
7.2拷贝游戏代码
bash
[root@docker101 /]#ll bird/
total 140
-rw-r--r-- 1 root root 15329 Aug 31 2022 2000.png
-rw-r--r-- 1 root root 51562 Aug 31 2022 21.js
-rw-r--r-- 1 root root 254 Aug 31 2022 icon.png
drwxr-xr-x 2 root root 102 Feb 23 2023 img
-rw-r--r-- 1 root root 3049 Aug 31 2022 index.html
-rw-r--r-- 1 root root 63008 Aug 31 2022 sound1.mp3
#拷贝进centos容器
[root@docker101 /]#docker cp ./bird c1:/usr/share/nginx/html/
Successfully copied 172kB to c1:/usr/share/nginx/html/
#进入容器,将文件移出来
[root@d138e6707b0a html]# ll
total 0
drwxr-xr-x 3 root root 98 Feb 23 2023 bird
[root@d138e6707b0a html]# mv bird/* ./
[root@d138e6707b0a html]# rm -rf bird/
[root@d138e6707b0a html]# ll
total 140
-rw-r--r-- 1 root root 15329 Aug 31 2022 2000.png
-rw-r--r-- 1 root root 51562 Aug 31 2022 21.js
-rw-r--r-- 1 root root 254 Aug 31 2022 icon.png
drwxr-xr-x 2 root root 102 Feb 23 2023 img
-rw-r--r-- 1 root root 3049 Aug 31 2022 index.html
-rw-r--r-- 1 root root 63008 Aug 31 2022 sound1.mp3
#前台启动nginx
[root@d138e6707b0a html]# nginx -g 'daemon off;'
7.3测试是否成功
bash
[root@docker101 /]#docker container inspect -f "{{range .NetworkSettings.Networks}}{{.IPAddress}} {{end}}" `docker container ps -q`
172.17.0.2
[root@docker101 /]#curl 172.17.0.2
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta id="viewport" name="viewport" content="width=device-width,user-scalable=no" />
<script type="text/javascript" src="21.js"></script>
<title>小鸟飞飞飞-文章库小游戏</title>
...
8)提交镜像
8.1将c1容器提交为镜像
bash
[root@docker101 /]#docker container commit c1 joren-bird:v0.1
sha256:bff260b2ca683e6cd9e3405716518dfadda604a9664075490b919667b91da40c
[root@docker101 /]#
8.2查看镜像
bash
[root@docker101 /]#docker image ls joren-bird
REPOSITORY TAG IMAGE ID CREATED SIZE
joren-bird v0.1 bff260b2ca68 42 seconds ago 236MB
9)启动自定义的镜像
9.1不指定自定义命令启动
bash
[root@docker101 /]#docker run -itd -p 88:80 --name game joren-bird:v0.1
c61d5e4ee930cac3e2e306c5409bba92b643f0de3ec5a1c413576271ca0d1c83
[root@docker101 /]#docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c61d5e4ee930 joren-bird:v0.1 "/bin/bash" 4 seconds ago Up 3 seconds 0.0.0.0:88->80/tcp, :::88->80/tcp game
[root@docker101 /]#docker top game
UID PID PPID C STIME TTY TIME CMD
root 112879 112858 0 15:22 pts/0 00:00:00 /bin/bash
[root@docker101 /]#docker exec -it game sh
sh-4.2# nginx
sh-4.2#
注意:
这种方式需要手动启动,不建议
9.2带启动命令的方式启动容器
bash
[root@docker101 /]#docker run -itd -p 88:80 --name game joren-bird:v0.1 nginx -g 'daemon off;'
6f6beb16c64c01c283e59ba9a206a7f46c5181f5b84b7c9eb41b9860aac715e8
[root@docker101 /]#docker top game
UID PID PPID C STIME TTY TIME CMD
root 114365 114343 0 15:31 pts/0 00:00:00 nginx: master process nginx -g daemon off;
polkitd 114383 114365 0 15:31 pts/0 00:00:00 nginx: worker process
polkitd 114384 114365 0 15:31 pts/0 00:00:00 nginx: worker process
注意:
这种方式可以不需要手动启动,但是还需要输入命令,不建议
9.3将新的启动镜像再提交一次
bash
[root@docker101 /]#docker run -itd --name game -p 88:80 joren-bird:v0.2
975db04e165cf8470d6d4d9d98ec184a67ffd0a7d6e48fb67e3552df5d9beefd
[root@docker101 /]#docker top game
UID PID PPID C STIME TTY TIME CMD
root 114978 114956 0 15:34 pts/0 00:00:00 nginx: master process nginx -g daemon off;
polkitd 114997 114978 0 15:34 pts/0 00:00:00 nginx: worker process
polkitd 114998 114978 0 15:34 pts/0 00:00:00 nginx: worker process
[root@docker101 /]#docker ps -l --no-trunc
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
975db04e165cf8470d6d4d9d98ec184a67ffd0a7d6e48fb67e3552df5d9beefd joren-bird:v0.2 "nginx -g 'daemon off;'" About a minute ago Up About a minute 0.0.0.0:88->80/tcp, :::88->80/tcp game
注意:
1.本案例中"joren-bird:v0.1"是"joren-bird:v0.2"的父镜像;
2.如果启动子镜像时没有指定COMMAND(容器的启动命令),则使用父镜像的启动命令;
基于ubuntu制作游戏镜像
1)导入镜像
bash
[root@docker101 /]#docker load -i ubuntu.tar.gz
931b7ff0cb6f: Loading layer [==================================================>] 80.41MB/80.41MB
Loaded image: ubuntu:22.04
2)启动镜像
bash
[root@docker101 /]#docker run --name c1 -it ubuntu:22.04
root@2cd135807400:/#
3)安装服务
bash
root@2cd135807400:/# apt update
root@2cd135807400:/# apt -y install nginx
4)拷贝测试代码
bash
#删除源文件
root@2cd135807400:/etc/nginx# rm -rf /var/www/html/*
#拷贝游戏代码
[root@docker101 ~]#docker cp /bird c1:/var/www/html/
Successfully copied 172kB to c1:/var/www/html/
#移出代码
root@2cd135807400:/var/www/html# ls
bird
root@2cd135807400:/var/www/html# mv bird/* ./
root@2cd135807400:/var/www/html# rm -rf bird/
root@2cd135807400:/var/www/html# ll
total 140
drwxr-xr-x 3 root root 98 Dec 21 08:04 ./
drwxr-xr-x 3 root root 18 Dec 21 07:55 ../
-rw-r--r-- 1 root root 15329 Aug 31 2022 2000.png
-rw-r--r-- 1 root root 51562 Aug 31 2022 21.js
-rw-r--r-- 1 root root 254 Aug 31 2022 icon.png
drwxr-xr-x 2 root root 102 Feb 23 2023 img/
-rw-r--r-- 1 root root 3049 Aug 31 2022 index.html
-rw-r--r-- 1 root root 63008 Aug 31 2022 sound1.mp3
5)提交镜像
bash
[root@docker101 ~]#docker commit c1 ubuntu-bird:v0.1
sha256:1348efdaf279c89808de874c58af34b433beff6a2b0b75a0d13e1825091ce6e4
6)启动镜像
bash
[root@docker101 ~]#docker run -d --name c1 -p 88:80 ubuntu-bird:v0.1 nginx -g 'daemon off;'
5cfd57cb9855dee7c76a3cf8d2bcfdf9cb2b1d5a50476ce6dc3a66eaf3633aaf
7)再次提交
bash
[root@docker101 ~]#docker commit c1 ubuntu-bird:v0.2
sha256:0efa9be001ccb834e27fe7fc71ed3893b8bd6b6e3490c5658d695448448536ff
[root@docker101 ~]#docker container rm -f `docker ps -qa`
5cfd57cb9855
[root@docker101 ~]#docker run -d --name c1 -p 88:80 ubuntu-bird:v0.2
689d13ec287469e8578eb333b1acf62b9192ee9a137948df618e748fcc478f2d
[root@docker101 ~]#docker top c1
UID PID PPID C STIME TTY TIME CMD
root 120733 120714 0 16:08 ? 00:00:00 nginx: master process nginx -g daemon off;
33 120751 120733 0 16:08 ? 00:00:00 nginx: worker process
33 120752 120733 0 16:08 ? 00:00:00 nginx: worker process
使用alpine镜像制作游戏镜像
1)导入镜像
bash
[root@docker101 ~]#docker load -i alpine.tar.gz
78561cef0761: Loading layer 8.082MB/8.082MB
Loaded image: alpine:3.20.2
2)启动容器并安装服务
bash
[root@docker101 ~]#docker run -it --name c1 alpine:3.20.2
/ #
/ # sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories #换成国内镜像源
/ # apk update
fetch https://mirrors.tuna.tsinghua.edu.cn/alpine/v3.20/main/x86_64/APKINDEX.tar.gz
fetch https://mirrors.tuna.tsinghua.edu.cn/alpine/v3.20/community/x86_64/APKINDEX.tar.gz
v3.20.8-102-gad44703098d [https://mirrors.tuna.tsinghua.edu.cn/alpine/v3.20/main]
v3.20.8-101-g50fadd0097b [https://mirrors.tuna.tsinghua.edu.cn/alpine/v3.20/community]
OK: 24180 distinct packages available
/ # apk add nginx #安装服务
(1/2) Installing pcre (8.45-r3)
(2/2) Installing nginx (1.26.3-r0)
Executing nginx-1.26.3-r0.pre-install
Executing nginx-1.26.3-r0.post-install
Executing busybox-1.36.1-r29.trigger
OK: 9 MiB in 16 packages
/ # du -sh /var/cache/apk/
2.2M /var/cache/apk/
/ # rm -rf /var/cache/apk/ #删除apk缓存
3)修改nginx配置
bash
/ # rm -rf /etc/nginx/http.d/default.conf #删除原配置文件
/ # vi /etc/nginx/http.d/default.conf #重写一个
server {
listen 80;
location / {
root /usr/share/nginx/html;
index index.html;
}
}
/ # rm -rf /usr/share/nginx/* #删除原文件
[root@docker101 /]#docker cp /bird c1:/usr/share/nginx/html #拷贝代码
Successfully copied 172kB to c1:/usr/share/nginx/html
4)检查配置文件语法
bash
/ # nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
5)提交镜像
bash
[root@docker101 /]#docker commit c1 joren-bird:v1.0
sha256:c3a4a30c80ad487bc818f7b271b1b17a7f50f3d613946534d0c89f08bfa19e17
6)启动容器
bash
[root@docker101 /]#docker run -d --name c1 -p 88:80 joren-bird:v1.0 nginx -g 'daemon off;'
ec7e8bb0128b281a72c6c53d0788f5dfc2ba0f0792223e0324a3ecdd07a299c5
7)再次提交
bash
[root@docker101 /]#docker commit c1 joren-bird:v1.1
sha256:c26012af7f7d02038de549d5727d1c84db78a75dbed010dfec1b9a1770d414eb
[root@docker101 /]#docker run -d --name c1 -p 88:80 joren-bird:v1.1
c6b0e29cc1a6795a994af34b54da81c9c311f06569c3f0b24781f420839631d1
[root@docker101 /]#docker top c1
UID PID PPID C STIME TTY TIME CMD
root 124206 124186 0 16:30 ? 00:00:00 nginx: master process nginx -g daemon off;
100 124229 124206 0 16:30 ? 00:00:00 nginx: worker process
100 124230 124206 0 16:30 ? 00:00:00 nginx: worker process
8)查看镜像大小
bash
[root@docker101 /]#docker image ls joren-bird
REPOSITORY TAG IMAGE ID CREATED SIZE
joren-bird v1.1 c26012af7f7d About a minute ago 9.41MB #alpine镜像大小
joren-bird v1.0 c3a4a30c80ad 3 minutes ago 9.41MB
joren-bird v0.2 62c92bb497d3 57 minutes ago 236MB #centos镜像大小
joren-bird v0.1 bff260b2ca68 About an hour ago 236MB
[root@docker101 /]#docker image ls ubuntu-bird
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu-bird v0.2 0efa9be001cc 24 minutes ago 205MB #ubuntu镜像大小
ubuntu-bird v0.1 1348efdaf279 26 minutes ago 205MB
手动制作镜像缺点
1.镜像的体积过大,不易传输
2.镜像的修改复杂,比如修改COMMAND启动命令,需要先启动容器,再提交一个新的镜像,基于新的镜像启动
3.无法利用缓存技术,需要手动逐条执行命令,和Linux虚拟机的操作类似
基于Dockerfile自动制作镜像
1)什么是Dockerfile
所谓的dockerfile本质就是一个制作镜像的流程。
2)基于Dockerfile制作镜像的流程
1.手动制作镜像的命令记录下来
2.基于dockerfile相关的指定进行改写
3)常用的dockerfile指令
``FROM
``RUN
``CMD
``ENTRYPOINT
``ENV
``ARG
``VOLUME
``EXPOSE
``MAINTAINER
``LABEL
``COPY
``ADD
``HELTHCHEACK
``ONBUILD
``SHELL
``USER
``...
4)基于Dockerfile制作游戏镜像案例
4.1进入到工作目录
bash
root@docker101 /]#mkdir -pv /joren/dockerfile
mkdir: created directory '/joren/dockerfile'
[root@docker101 /]#cd /joren/dockerfile/
[root@docker101 /joren/dockerfile]#
[root@docker101 /joren/dockerfile]#mkdir alpine centos ubuntu
[root@docker101 /joren/dockerfile]#ll
total 0
drwxr-xr-x 2 root root 6 Dec 21 16:43 alpine
drwxr-xr-x 2 root root 6 Dec 21 16:43 centos
drwxr-xr-x 2 root root 6 Dec 21 16:43 ubuntu
4.2打包文件
bash
[root@docker101 /bird]#tar zcvf bird.tar.gz *
2000.png
21.js
icon.png
img/
img/bg1.jpg
img/bg2.jpg
img/number1.png
img/number2.png
img/s1.png
img/s2.png
index.html
sound1.mp3
[root@docker101 ~]#mv bird.tar.gz /joren/dockerfile/alpine/bird/
[root@docker101 ~]#ll /joren/dockerfile/alpine/bird/
total 96
-rw-r--r-- 1 root root 91576 Dec 21 17:09 bird.tar.gz
-rw-r--r-- 1 root root 339 Dec 21 16:52 Dockerfile
4.3准备配置文件
bash
[root@docker101 /joren/dockerfile/alpine/bird]#vim bird.conf
server {
listen 80;
location / {
root /usr/share/nginx/html;
index index.html;
}
}
4.4编写dockerfile
bash
[root@docker101 /joren/dockerfile]#cd alpine/
[root@docker101 /joren/dockerfile/alpine]#mkdir bird && cd bird
[root@docker101 /joren/dockerfile/alpine/bird]#
[root@docker101 /joren/dockerfile/alpine/bird]#vim Dockerfile
#指定基础镜像,后续的所有操作都在该镜像基础之上操作
FROM alpine:3.20.2
#在容器中运行命令,安装nginx服务
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories && \
apk update && \
apk add nginx && \
rm -rf /var/cache/apk/ rm -f /usr/share/nginx/*
#将本地配置文件覆盖容器的原配置文件
COPY bird.conf /etc/nginx/http.d/default.conf
#将当前目录下的"bird.tar.gz"复制到容器的根目录下
COPY bird.tar.gz /
#容器解压到指定目录
RUN mkdir -pv /usr/share/nginx/html && \
tar xf /bird.tar.gz -C /usr/share/nginx/html && \
rm -f /bird.tar.gz
#指定容器的启动命令
CMD ["nginx","-g","daemon off;"]
4.5打镜像
bash
[root@docker101 /joren/dockerfile/alpine/bird]#docker build -t joren-bird:v1.2 . #因为文件在当前目录,所以使用 '.'。
5)基于镜像启动服务
bash
[root@docker101 /joren/dockerfile/alpine/bird]#docker run -d -p 88:80 --name game joren-bird:v1.2
ae381a98a5b6de23f3f5604083fa3a031210416992269fc4bfb5ff642fba25c0
[root@docker101 /joren/dockerfile/alpine/bird]#docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ae381a98a5b6 joren-bird:v1.2 "nginx -g 'daemon of..." 4 seconds ago Up 3 seconds 0.0.0.0:88->80/tcp, :::88->80/tcp game
[root@docker101 /joren/dockerfile/alpine/bird]#docker top game
UID PID PPID C STIME TTY TIME CMD
root 2654 2633 0 17:29 ? 00:00:00 nginx: master process nginx -g daemon off;
100 2672 2654 0 17:29 ? 00:00:00 nginx: worker process
100 2673 2654 0 17:29 ? 00:00:00 nginx: worker process
注意:建议使用tar包打包文件,使用zip可能会出现压缩损坏文件的情况,尤其是图片类型文件;