docker镜像的制作
DockerFile 可以说是一种可以被 Docker 程序解释的脚本,DockerFile 是由一条条的命令组成的,每条命令对应linux 下面的一条命令,Docker 程序将这些 DockerFile 指令再翻译成真正的 linux 命令,其有自己的书写方式和支持的命令,Docker 程序读取 DockerFile 并根据指令生成 Docker 镜像,相比手动制作镜像的方式,DockerFile 更能直观的展示镜像是怎么产生的,有了写好的各种各样 DockerFile 文件,当后期某个镜像有额外的需求时,只要在之前的DockerFile 添加或者修改相应的操作即可重新生成新的 Docke 镜像,避免了重复手动制作镜像的麻烦,
常用的指令
FROM #指定基础镜像
FROM centos:7.9.2009
MAINTAINER #定义镜像作者信息
MAINTAINER "Songwei 583341445"
ENV #定义容器环境变量
ENV name=zhangsan
ENV age=18
RUN #在容器中执行shell命令
RUN yum install epel-release -y
RUN yum -y install vim && yum -y install nginx
USER #指定该容器运行时的用户名和 UID,后续的 RUN 命令也会使用这面指定的用户执行
USER nginx
ADD #添加本地文件到容器,tar包会自动解压
ADD code.tar.gz /data/tomcat/webapps/
COPY #添加本地文件到容器,需要手动解压
COPY nginx.conf /apps/nginx/conf/nginx/nginx.conf
EXPOSE #定义容器暴露端口
EXPOSE 80 443
CMD #在本地容器中运行命令,一般是持续运行,不导致容器退出
CMD ["/usr/bin/run_tomcat.sh","mysqld"]
编译NGINX
编写Dockerfile
# vim Dockerfile
# bianyi nginx
#
#
FROM centos:7.9.2009
MAINTAINER "Songwei 583341445@qq.com"
RUN yum install -y epel-release
RUN yum install -y vim lrzsz tree screen psmisc lsof tcpdump wget ntpdate gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel net-tools iotop bc zip unzip zlib-devel bash-completion nfs-utils automake libxml2 libxml2-devel libxslt libxslt-devel perl perl-ExtUtils-Embed
ADD nginx-1.18.0.tar.gz /usr/local/src/
RUN cd /usr/local/src/nginx-1.18.0 && ./configure --prefix=/apps/nginx && make && make install
RUN useradd -s /sbin/nologin nginx
COPY nginx.conf /apps/nginx/conf
RUN mkdir -p /data/html && echo "configure-nginx:v2" >/data/html/index.html
RUN chown -R nginx:nginx /data/html /apps/nginx
RUN ln -sv /apps/nginx/sbin/nginx /usr/sbin/
#USER nginx
EXPOSE 80 443
CMD ["nginx","-g","daemon off;"]
准备源码包与配置文件
# ls
Dockerfile nginx-1.18.0.tar.gz nginx.conf
# vim nginx.conf
........
user nginx;
........
location / {
root /data/html;
index index.html index.htm;
}
........
执行镜像构建
#进入到Dockerfile目录
# docker build -t 192.168.75.79/nginx/nginx:v2 .
构建完成
docker build -t 192.168.75.79/nginx/nginx:v2 .
[+] Building 0.1s (15/15) FINISHED
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 32B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/centos:7.9.2009 0.0s
=> [1/10] FROM docker.io/library/centos:7.9.2009 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 72B 0.0s
=> CACHED [2/10] RUN yum install -y epel-release 0.0s
=> CACHED [3/10] RUN yum install -y vim lrzsz tree screen psmisc lsof tcpdump wget ntpdate gcc gcc-c++ glibc glibc-devel pcre 0.0s
=> CACHED [4/10] ADD nginx-1.18.0.tar.gz /usr/local/src/ 0.0s
=> CACHED [5/10] RUN cd /usr/local/src/nginx-1.18.0 && ./configure --prefix=/apps/nginx && make && make install 0.0s
=> CACHED [6/10] RUN useradd -s /sbin/nologin nginx 0.0s
=> CACHED [7/10] COPY nginx.conf /apps/nginx/conf 0.0s
=> CACHED [8/10] RUN mkdir -p /data/html && echo "configure-nginx:v2" >/data/html/index.html 0.0s
=> CACHED [9/10] RUN chown -R nginx:nginx /data/html /apps/nginx 0.0s
=> CACHED [10/10] RUN ln -sv /apps/nginx/sbin/nginx /usr/sbin/ 0.0s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:857aea42728bde3f1288b3e31d505510e61ab7bae681b0a926a5de5b6bb21434 0.0s
=> => naming to 192.168.75.79/nginx/nginx:v2
查看本地镜像
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.75.79/nginx/nginx v2 857aea42728b 33 minutes ago 893MB #刚刚构建成功
192.168.75.79/nginx/nginx v1 6ef1b08fe018 About an hour ago 771MB
1.1.1.1/nginx/nginx 8.88 e5ad6e029e21 29 hours ago 185MB
nginx latest 605c77e624dd 19 months ago 141MB
httpd latest dabbfbe0c57b 19 months ago 144MB
debian latest 6f4986d78878 19 months ago 124MB
alpine latest c059bfaa849c 20 months ago 5.59MB
ubuntu latest ba6acccedd29 22 months ago 72.8MB
centos 7.9.2009 eeb6ee3f44bd 23 months ago 204MB
centos latest 5d0da3dc9764 23 months ago 231MB
nginx 1.18.0 c2c45d506085 2 years ago 133MB
nginx 1.8.1 0d493297b409 7 years ago 133MB
启动容器
# docker run -it -d --name nginx-v587 -p 9093:80 192.168.75.79/nginx/nginx:v2
### 启动容器
```bash
# docker run -it -d --name nginx-v587 -p 9093:80 192.168.75.79/nginx/nginx:v2
已经成功运行了。