什么是Dockerfile?
在制作Docker镜像时有两种方式:
1、使用 Docker container,直接构建容器,再导出成镜像使用
2、使用 Dockerfile,将所有动作写在文件中,再用docker build制作成镜像。
Docker内容简介
# This my first nginx Dockerfile
# Version 1.0
# Base images 基础镜像
FROM ubuntu
#MAINTAINER 维护者信息
MAINTAINER SD
#ENV 设置环境变量
ENV PATH /usr/local/nginx/sbin:$PATH
#ADD 文件放在当前目录下,拷过去会自动解压
ADD /etc/passwd /opt/passwd
#RUN 执行命令
RUN apt-get update
RUN apt-get upgrade -y
#WORKDIR 工作目录,即在哪个目录下面,可以理解成cd
WORKDIR /etc/init.d
#EXPOSE 映射端口,即将哪个端口开放。
EXPOSE 80
#CMD 运行以下命令。
CMD ["nginx"]
使用Dockerfile构建静态网站
构建一个简单的web网站
1)创建Dockerfile存放的目录、创建Dockerfile文件
命令:
[[email protected] ~]# cd /opt/
[[email protected] opt]# mkdir sample_web
[[email protected] opt]# cd sample_web/
[[email protected] sample_web]# ls
[[email protected] sample_web]# touch Dockerfile
[[email protected] sample_web]# vim Dockerfile
2)准备nginx环境
创建nginx配置文件存放的目录
[[email protected] sample_web]# mkdir nginx
[[email protected] sample_web]# cd nginx/
拉取nginx配置文件(github上面有这东西,直接用现成的就好)
[[email protected] nginx]# wget https://github.com/guanwei/dockerbook-code/blob/master/5/sample/nginx/global.conf
[[email protected] nginx]# wget https://github.com/guanwei/dockerbook-code/blob/master/5/sample/nginx/nginx.conf
3)编写Dockerfile文件
需要编写一个包括:
(1)安装nginx
(2)在容器内创建一个/var/www/html目录
(3)将本地的nginx配置文件添加至镜像内
(4)启用80端口
[[email protected] sample_web]# cat Dockerfile
FROM ubuntu:14.04
MAINTAINER [email protected]
ENV REFRESHED_AT 2020-11-06
RUN apt-get update
RUN apt-get -y -q install nginx vim
RUN mkdir -p /var/www/html
ADD nginx/nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
4)使用Docker build创建镜像
[email protected]:/opt/docker# docker build -t nginx1 .
Sending build context to Docker daemon 177.2kB
Step 1/8 : FROM ubuntu
---> d70eaf7277ea
Step 2/8 : MAINTAINER [email protected]
---> Using cache
---> 8e81046715df
Step 3/8 : ENV REFRESHED_AT 2020-11-06
---> Using cache
---> d2c937e078fd
Step 4/8 : RUN apt-get update
---> Using cache
---> 0d83a4f97903
Step 5/8 : RUN apt-get -y -q install nginx vim
---> Using cache
---> 06f6fd29415e
Step 6/8 : RUN mkdir -p /var/www/html
---> Using cache
---> 2beea8b82327
Step 7/8 : ADD nginx/nginx.conf /etc/nginx/nginx.conf
---> 1668b007c15b
Step 8/8 : EXPOSE 80
---> Running in 1e3abe5842d2
Removing intermediate container 1e3abe5842d2
---> bca71ed33033
Successfully built bca71ed33033
Successfully tagged nginx1:latest
5)运行使用Dockerfile创建的镜像
[email protected]:/opt/docker# docker run -tdi --name nginx01 -p 8011:80 nginx1 /bin/bash
36033d6957ded5cf72c28ae054495452beaf5e3c5454aa65fbfcd802d6b9171f
[email protected]:/opt/docker# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
36033d6957de nginx1 "/bin/bash" 3 seconds ago Up 2 seconds 0.0.0.0:8011->80/tcp nginx01
[email protected]:/opt/docker# docker exec -ti nginx01 /bin/bash "/etc/init.d/nginx" restart
* Restarting nginx nginx [ OK ]
6)Docker中的数据卷
简单说下数据卷这个东西吧,卷可以理解成在宿主机选择一个目录,将这个目录映射到容器内部,可以让多个容器共享这个宿主机的目录下所有东西,也可以赋予权限。
[email protected]:~# docker run --name nginx_01 -tid -v /var/www/html/:/var/www/html/ -p 8001:80 nginx1 /bin/bash
[email protected]:~# docker run --name nginx_02 -tid -v /var/www/html/:/var/www/html/ -p 8002:80 nginx1 /bin/bash
上面的命令:创建的两个容器,将宿主机的/var/www/html目录映射到了容器内相同的路径下
使用命令启动容器内的nginx服务
[email protected]:~# docker exec -ti nginx_01 bash "/etc/init.d/nginx" restart
[email protected]:~# docker exec -ti nginx_02 bash "/etc/init.d/nginx" restart
测试是否成功
浏览器访问: ip:8001/8002
在宿柱机的/var/www/html目录下编写一个index.html网页
[email protected]:~# vim /var/www/html/index.html
浏览器访问成功