目录
Dockerfile 部分命令解释
1、ENTRYPOINT
而ENTRYPOINT 语言 CMD的区别
1、docker run 启动容器的时候,可以传递参数进入给ENTRYPOINT里面的命令(-e)
2、当2者都存在的时候,CMD里的内容会成为 ENTRYPOINT 里的参数(位置参数)
如图所示,完成如下实例
配置nginx镜像,并配置监听端口为8007项目:
编译Dockerfile文件
编译好one_creat_ngin.sh文件
在下载过程中,我们可以使用docker stats查看容器的性能
编辑
下面我们将修改nginx的配置文件
进入容器内部查看nginx配置文件路径,从而得到nginx的配置文件:
修改nginx配置文件(将listen 80 改为 8007)
创建volume
修改Dockerfile文件
Dockerfile 部分命令解释
1、ENTRYPOINT
ENTRYPOINT ["xxx"] --》指定启动容器的时候运行命令
撰写方式:
而ENTRYPOINT 语言 CMD的区别
1、docker run 启动容器的时候,可以传递参数进入给ENTRYPOINT里面的命令(-e)
2、当2者都存在的时候,CMD里的内容会成为 ENTRYPOINT 里的参数(位置参数)
因此相当于docker-entrypoint.sh mysqld
因此ENTRYPOINT更加高级
dockerfile中CMD和ENTRYPOINT必须要有一个吗?
在 Dockerfile 中定义CMD和ENTRYPOINT指令并不是必须的,但如果想要以容器形式运行应用程序,则至少需要定义其中一个。
如图所示,完成如下实例
其中需要注意while.sh 文件的权限问题
chmod +x while.h
测试:
[root@mysql mydocker2]# vim hello.txt
[root@mysql mydocker2]# vim Dockerfile
[root@mysql mydocker2]# vim while.sh
[root@mysql mydocker2]# chmod +x while.sh
[root@mysql mydocker2]# ll
总用量 8
-rw-r--r-- 1 root root 83 6月 19 09:51 Dockerfile
-rwxr-xr-x 1 root root 95 6月 19 09:53 while.sh
[root@mysql mydocker2]# docker build -t scbusybox:1.2 .
[root@mysql mydocker2]# docker run --rm -it --name scbusybox-1 scbusybox:1.2
hello world sanchuang! 1
hello world sanchuang! 2
hello world sanchuang! 3
hello world sanchuang! 4
hello world sanchuang! 5
hello world sanchuang! 6
hello world sanchuang! 7
hello world sanchuang! 8
hello world sanchuang! 9
hello world sanchuang! 10
配置nginx镜像,并配置监听端口为8007项目:
准备一台虚拟机centos7.9
安装好docker,创建文件夹/dockernginx
编译Dockerfile文件
[root@mysql dockernginx]# cat Dockerfile
FROM centos:7 #FROM语句指定了创建镜像的基础镜像
ENV NGINX_VERSION 1.23.1 #定义环境变量
ENV AUTHOR sc_clay
LABEL maintainer="clay<2384319786@qq.com>" #LABEL语句用于给镜像添加元数据信息
WORKDIR /sc #WORKDIR语句用于设置当前工作目录
COPY . /sc #将宿主机本地的文件copy到镜像中的/sc目录下
RUN yum install vim net-tools iputils iproute -y \
&& bash /sc/one_creat_nginx.sh && mkdir /scvolume #镜像生成过程中执行的命令
EXPOSE 80 #暴露80端口
VOLUME /scvolume #设置卷为/scvolume
ENV PATH=/usr/local/scnginx66/sbin:$PATH #定义环境变量PATH
STOPSIGNAL SIGQUIT #STOPSIGNAL语句用于设置容器停止时发送给进程的信号,其中,<signal>参数表示要发送的信号名称或编号,默认为SIGTERM
CMD ["nginx","-g","daemon off;"]
[root@mysql dockernginx]#
编译好one_creat_ngin.sh文件
[root@mysql dockernginx]# cat one_creat_nginx.sh
#!/bin/bash
#新建一个文件夹用来存放下载的nginx源码包
mkdir -p /nginx
cd /nginx
#新建工具人用户、设置无法登录模式
useradd -s /sbin/nologin clay
#下载nginx
#wget http://nginx.org/download/nginx-1.23.2.tar.gz
curl -O http://nginx.org/download/nginx-1.23.2.tar.gz
#解压nginx源码包
tar xf nginx-1.23.2.tar.gz
#解决软件依赖关系、需要安装的软件包
yum install epel-release -y
yum install gcc gcc-c++ openssl openssl-devel pcre pcre-devel automake make psmisc net-tools lsof vim geoip geoip-devel wget zlib zlib-devel -y
#到达nginx配置文件目录下
cd nginx-1.23.2
#编译前的配置
./configure --prefix=/usr/local/scnginx66 --user=clay --with-http_ssl_module --with-http_v2_module --with-stream --with-http_stub_status_module --with-threads
#编译、开启一个进程同时编译
make -j 1
#编译安装
make install
[root@mysql dockernginx]#
在下载过程中,我们可以使用docker stats查看容器的性能
如果我们想知道容器内进程的消耗,我们就可以使用docker top 容器名
下载完成后查看镜像
[root@mysql dockernginx]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
sclpf-nginx 1.23.1 e704e64746c5 14 minutes ago 671MB
scbusybox 1.2 c86b8980dcc1 5 hours ago 4.86MB
sccentos 7 d1c7ea7a3707 10 hours ago 204MB
nginx latest 3f8a00f137a0 4 months ago 142MB
mysql 5.7.35 8a8a506ccfdc 20 months ago 448MB
centos 7 eeb6ee3f44bd 21 months ago 204MB
[root@mysql dockernginx]#
创建容器
[root@mysql ~]# docker run -d -p 4430:80 --name lpf-nginx sclpf-nginx:1.23.1
2eed8b767d2f4bc133b77655776911ff00460164ba02a92e6c8865b8412a6dd8
[root@mysql ~]#
查看容器是否启动:
[root@mysql ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2eed8b767d2f sclpf-nginx:1.23.1 "nginx -g 'daemon of…" About a minute ago Up About a minute 0.0.0.0:4430->80/tcp, :::4430->80/tcp lpf-nginx
22e10551d3cd nginx "/docker-entrypoint.…" 24 hours ago Up 4 hours 0.0.0.0:6606->80/tcp, :::6606->80/tcp claylpf-nginx-1
[root@mysql ~]#
下面我们将修改nginx的配置文件
1、指定nginx.conf配置文件
监听端口号为8007
2、创建容器的时候使用卷,加载里面的网页
2.1创建卷nginx_web,新建一个index.html网页文件
2.2创建容器,加载容器
进入容器内部查看nginx配置文件路径,从而得到nginx的配置文件:
[root@mysql ~]# docker exec -it lpf-nginx bash
[root@2eed8b767d2f sc]# ls
[root@2eed8b767d2f /]# ls
anaconda-post.log bin dev etc home lib lib64 media mnt nginx opt proc root run sbin sc scvolume srv sys tmp usr var
[root@2eed8b767d2f /]# cd /usr/local/scnginx66/conf/
[root@2eed8b767d2f conf]# ls
fastcgi.conf fastcgi_params koi-utf mime.types nginx.conf scgi_params uwsgi_params win-utf
fastcgi.conf.default fastcgi_params.default koi-win mime.types.default nginx.conf.default scgi_params.default uwsgi_params.default
[root@2eed8b767d2f conf]#
得到nginx的配置文件
[root@mysql dockernginx]# docker cp lpf-nginx:/usr/local/scnginx66/conf/nginx.conf .
Successfully copied 4.61kB to /dockernginx/.
[root@mysql dockernginx]# ls
Dockerfile nginx.conf one_creat_nginx.sh
[root@mysql dockernginx]#
修改nginx配置文件(将listen 80 改为 8007)
创建volume
[root@mysql dockernginx]# docker volume create nginx_web
nginx_web
[root@mysql dockernginx]# docker volume ls
DRIVER VOLUME NAME
local 4c7c035ff15b9b022f6fc875d8303f6286cf61d8e89ea1692996760169393f1e
local 6167418cb7d0a3dfacef4439f410e1860c088d297cf47aeceaf88d3e56528219
local a5c3ab3de7511c90ba7a623e4b458e18a4411b2c5140a35b7e03eb52c5ad0b48
local e129efa82af7232ec5cdfd9f1ebb5e2ab35be29216166551aefe7d322b0309bf
local nginx-web
创建index.html 放在卷的数据目录下
[root@mysql dockernginx]# cd /var/lib/docker/volumes/nginx_web/_data
[root@mysql _data]# ls
[root@mysql _data]# vim index.html;
[root@mysql _data]# ls
index.html
[root@mysql _data]# cat index.html
wo shi da shuai ge lpf
niu bi
修改Dockerfile文件
FROM centos:7
ENV NGINX_VERSION 1.23.1
ENV AUTHOR sc_clay
LABEL maintainer="clay<2384319786@qq.com>"
WORKDIR /sc
COPY . /sc
RUN yum install vim net-tools iputils iproute -y \
&& bash /sc/one_creat_nginx.sh && mkdir /scvolume
EXPOSE 8007
VOLUME /scvolume
ENV PATH=/usr/local/scnginx66/sbin:$PATH
STOPSIGNAL SIGQUIT
COPY nginx.conf /usr/local/scnginx66/conf #添加这一条
CMD ["nginx","-g","daemon off;"]
重新编译镜像
[root@mysql dockernginx]# docker build -t sclpf-nginx:1.23.2 .
启动容器使用我们的镜像 和 需要使用的卷
[root@mysql dockernginx]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
sclpf-nginx 1.23.2 361d4088b257 15 minutes ago 671MB
sclpf-nginx 1.23.1 e704e64746c5 About an hour ago 671MB
scbusybox 1.2 c86b8980dcc1 6 hours ago 4.86MB
sccentos 7 d1c7ea7a3707 11 hours ago 204MB
nginx latest 3f8a00f137a0 4 months ago 142MB
mysql 5.7.35 8a8a506ccfdc 20 months ago 448MB
centos 7 eeb6ee3f44bd 21 months ago 204MB
[root@mysql dockernginx]# docker run -d -p 4455:8007 --name lpf-nginx-1 -v nginx_web:/usr/local/scnginx66/html sclpf-nginx:1.23.2
dec86911d80e28e1bd2ce8b58cf5222d0c752ad17d8d73f141e3fce0f63c7e37
[root@mysql dockernginx]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dec86911d80e sclpf-nginx:1.23.2 "nginx -g 'daemon of…" 7 seconds ago Up 6 seconds 0.0.0.0:4455->8007/tcp, :::4455->8007/tcp lpf-nginx-1
2eed8b767d2f sclpf-nginx:1.23.1 "nginx -g 'daemon of…" About an hour ago Up About an hour 0.0.0.0:4430->80/tcp, :::4430->80/tcp lpf-nginx
22e10551d3cd nginx "/docker-entrypoint.…" 25 hours ago Up 5 hours 0.0.0.0:6606->80/tcp, :::6606->80/tcp claylpf-nginx-1
[root@mysql dockernginx]#
最后测试端口: