系列文章目录
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:镜像的制作方式有两种:
一种是用镜像生成容器安装调试好后再制作成自己的镜像
一种是 使用Dockerfile文件从官网的系统源始镜像开始制作自己的镜像
提示:以下是本篇文章正文内容,下面案例可供参考
一、第一种用镜像生成容器安装调试好后再制作成自己的镜像
1.1 安全起见下载官方的centos系统镜像,在该系统内安装nginx之后,在封装成镜像
1. 搜索镜像
# docker search centos
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official build of CentOS. 6602 [OK]
2. 下载镜像,如有可以跳过这步
# docker pull centos:latest
3. 查看镜像
# docker images
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest d1165f221234 3 months ago 13.3kB
centos latest 300e315adb2f 6 months ago 209MB
1.2 使用镜像创建容器并进入容器
# docker run -it --name centos.nginx centos /bin/bash
[root]# docker run -it --name centos.nginx centos /bin/bash
[root@32296d8d7530 /]#
1.3 创建epel源和安装nginx
创建epel源文件
#先查看下官网信息: http://nginx.org/en/linux_packages.html#stable
要设置 yum 存储库,请创建以/etc/yum.repos.d/nginx.repo 以下内容命名的文件 :
稳定版:
[nginx-stable]
name=nginx stable repo
baseurl=http://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=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
安装nginx
# yum install yum-utils //先决条件,这个可以不用管,官网有提
# yum install nginx -y
查看下版本
# nginx -v
nginx version: nginx/1.20.1
查看安装目录
# rpm -ql nginx
[root@3dcaed4646f2 /]# rpm -ql nginx
/etc/logrotate.d/nginx
/etc/nginx
/etc/nginx/conf.d
/etc/nginx/conf.d/default.conf
/etc/nginx/fastcgi_params
/etc/nginx/mime.types
/etc/nginx/modules
/etc/nginx/nginx.conf
/etc/nginx/scgi_params
/etc/nginx/uwsgi_params
/usr/lib/.build-id
/usr/lib/.build-id/1d
/usr/lib/.build-id/1d/3ae6e2bbd9ecc1b968a5b9272ba0f431827ac1
/usr/lib/.build-id/e8
/usr/lib/.build-id/e8/4bc53181babc7ef9cb59c1239522ffe45d375b
/usr/lib/systemd/system/nginx-debug.service
/usr/lib/systemd/system/nginx.service
/usr/lib64/nginx
/usr/lib64/nginx/modules
/usr/libexec/initscripts/legacy-actions/nginx
/usr/libexec/initscripts/legacy-actions/nginx/check-reload
/usr/libexec/initscripts/legacy-actions/nginx/upgrade
/usr/sbin/nginx
/usr/sbin/nginx-debug
/usr/share/doc/nginx-1.20.1
/usr/share/doc/nginx-1.20.1/COPYRIGHT
/usr/share/man/man8/nginx.8.gz
/usr/share/nginx
/usr/share/nginx/html
/usr/share/nginx/html/50x.html
/usr/share/nginx/html/index.html
/var/cache/nginx
/var/log/nginx
1.4 配置nginx为前台启动模式
# 在nginx的配置文件中加入如下参数
vi /etc/nginx/nginx.conf
daemon off; ##关闭守护进程;
使用exit退出容器
1.5 使用docker commit命令制作镜像
# docker ps -a
制作镜像
docker commit -m “nginx” -a “centos.nginx” -c ‘CMD [“/usr/sbin/nginx”]’ 3dcaed4646f2 centos-nginx
-m 来指定提交的说明信息,跟我们使用的版本控制工具一样;
-a 可以指定更新的用户信息;之后是用来创建镜像的容器的 ID;最后指定目标镜像的仓库名和 tag 信息。创建成功后会返回这个镜像的 ID 信息;
-c 制作镜像之后执行的命令
3dcaed4646f2 容器ID,就是希望将哪个容器重新制作
centos-nginx 制作之后的镜像名称
使用新镜像创建容器
#docker run -d -p 83:80 --name nginx03 centos-nginx:latest
#docker start nginx03
二 使用Dockerfile文件从官网的系统源始镜像开始制作自己的镜像
2.1 在本地新建一个空目录docker-c,创建nginx源文件和Dockerfile文件
# mkdir docker-c
# cd docker-c
2.2 创建nginx源文件和Dockerfile文件
vi nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
2.3 Dockerfile文件
vi dockerfile
# This is My first Dockerfile
# Version 1.0
# Author: ives
# Base images
FROM centos:latest
ADD nginx.repo /etc/yum.repos.d/
RUN yum install nginx -y
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
RUN useradd -s /sbin/nologin -M www
EXPOSE 80
CMD ["nginx"]
注意: Dockerfile和nginx.repo在同一目录下 ,本目录下不要有其他东西
2.4 创建镜像:
docker build -t nginx:v1 .
#docker images
# docker run -d -p 85:80 --name nginx05 nginx:v1 ## 使用新镜像创建容器
# docker start nginx05
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bdada9573359 nginx:v1 "nginx" 10 minutes ago Up 10 minutes 0.0.0.0:85->80/tcp, :::85->80/tcp nginx05
Docker Nginx容器-挂载目录
#docker run -d -p 85:80 --name nginx01 \
-v /data/nginx/log:/var/log/nginx \
-v /data/nginx/html:/usr/share/nginx/html \
-v /data/nginx/conf:/etc/nginx/conf.d \
registry.cn-hangzhou.aliyuncs.com/ivesgdidf/nginx
拷贝临时容器默认文件到默认路径
直接挂载,默认配置文件不会生成,所以需要从一个临时的容器中复制一份过来
# docker run -d -p 83:80 --name nginx03 centos-nginx:latest
# docker start nginx03
# docker cp nginx03:/usr/share/nginx/html/index.html /data/nginx/html
# docker cp nginx03:/etc/nginx/conf.d/default.conf /data/nginx/conf/
# docker stop nginx03 | docker rm nginx03 ##删除临时容器
# docker restart nginx01
参考:
https://developer.aliyun.com/article/543025
https://www.cnblogs.com/withfeel/p/11670687.html
Dockerfile 使用说明
https://docs.docker.com/develop/develop-images/dockerfile_best-practices/
https://docs.docker.com/engine/reference/builder/
补充事项有空可以看看,nging官网上的
在 Docker 主机上维护内容和配置文件
创建容器后,可以将Docker主机上的本地目录挂载到容器内的目录中。NGINX 镜像使用默认的 NGINX 配置,它/usr/share/nginx/html用作容器的根目录并将配置文件放在/etc/nginx. 对于内容在本地目录中/var/www且配置文件在 中的 Docker 主机/var/nginx/conf,请运行以下命令:
$ docker run --name mynginx2 --mount type=bind,source=/var/www,target=/usr/share/nginx/html,readonly --mount source=/var/nginx/conf,target=/etc/nginx/conf,readonly -p 80:80 -d nginx
对 Docker 主机上本地目录中的文件所做的任何更改都会反映在目录和容器中。该选项意味着这些目录只能在 Docker 主机上更改,而不能从容器内更改。/var/www and /var/nginx/conf/usr/share/nginx/html/etc/nginxreadonly