dockerfile实操案例
dockerfile实操案例
部署nginx案例
[root@hrz3 ~]# vim Dockerfile
FROM centos:7 # 基础镜像:使用CentOS 7作为基础操作系统
MAINTAINER hrz@example.com # 维护者信息:标明镜像的作者和联系方式
RUN rm -rf /etc/yum.repos.d/* # 清理yum源配置:删除系统原有的yum仓库配置文件
ADD Centos-7.repo /etc/yum.repos.d/ # 将本地的Centos-7.repo文件复制到容器中
ADD epel-7.repo /etc/yum.repos.d/ # 添加EPEL扩展源:EPEL源包含更多额外的软件包
RUN yum -y install nginx # 安装Nginx:使用yum安装nginx软件包
EXPOSE 80 # 暴露80端口:声明容器运行时监听的端口号
# 启动命令:设置容器启动时执行的默认命令
# "/usr/sbin/nginx" - Nginx主程序路径
# "-g" - 全局配置指令
# "daemon off;" - 让Nginx在前台运行(容器要求主进程在前台运行,否则容器会退出)
CMD ["/usr/sbin/nginx","-g","daemon off;"]
构建nginx镜像
[root@hrz3 ~]# docker build -t nginx:v1 .
[+] Building 42.7s (10/10) FINISHED docker:default=> [internal] load build definition from Dockerfile 0.0s=> => transferring dockerfile: 260B 0.0s=> [internal] load metadata for docker.io/library/centos:7 0.0s=> [internal] load .dockerignore 0.0s=> => transferring context: 2B 0.0s=> [1/5] FROM docker.io/library/centos:7 0.0s=> [internal] load build context 0.0s=> => transferring context: 66B 0.0s=> CACHED [2/5] RUN rm -rf /etc/yum.repos.d/* 0.0s=> CACHED [3/5] ADD Centos-7.repo /etc/yum.repos.d/ 0.0s=> CACHED [4/5] ADD epel-7.repo /etc/yum.repos.d/ 0.0s=> [5/5] RUN yum -y install nginx 42.2s=> exporting to image 0.4s => => exporting layers 0.4s => => writing image sha256:97d5234cd57e20acaeb3b271675d47c1541cd8282b74e0789d2aa48a2 0.0s => => naming to docker.io/library/nginx:v1
查看是否构建成功
[root@hrz3 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx v1 97d5234cd57e 55 seconds ago 536MB
创建nginx镜像的容器测试是否能使用
[root@hrz3 ~]# docker run -itd --name mynginx -p 80:80 nginx:v1
1e9e1e3162e014c813956f5dd277211eadc1ebe93ea7dcad77117ebe1372b2c8
[root@hrz3 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1e9e1e3162e0 nginx:v1 "/usr/sbin/nginx -g …" 10 seconds ago Up 9 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp mynginx
访问网站192.168.100.30结果是403
进入容器查看发现index.html被标红
[root@hrz3 ~]# docker exec -it mynginx /bin/bash
[root@1e9e1e3162e0 /]# cd /usr/share/nginx/
[root@1e9e1e3162e0 nginx]# cd html/
[root@1e9e1e3162e0 html]# ls
404.html 50x.html en-US icons img index.html nginx-logo.png poweredby.png
删除并重新写一个index.html
[root@1e9e1e3162e0 html]# rm -rf index.html
[root@1e9e1e3162e0 html]# echo "Holle World" > index.html
再次访问
也可以在Dockerfile中提前写好
[root@hrz3 ~]# vim Dockerfile
FROM centos:7
MAINTAINER hrz@example.com
RUN rm -rf /etc/yum.repos.d/*
ADD Centos-7.repo /etc/yum.repos.d/
ADD epel-7.repo /etc/yum.repos.d/
RUN yum -y install nginx
RUN rm -rf /usr/share/nginx/html/index.html && echo "Holle world" > /usr/share/nginx/html/index.html
EXPOSE 80
CMD ["/usr/sbin/nginx","-g","daemon off;"]
构建镜像并创建容器
[root@hrz3 ~]# docker build -t nginx:v2 .
[root@hrz3 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx v2 69dcbe3cb46e 22 seconds ago 536MB
[root@hrz3 ~]# docker run -itd --name mynginx2 -p 8000:80 nginx:v2
e83920cda5af0133887637b52fbbefd1fadeff1d01b03831f9ce0a64061dd416
访问网站
部署扫雷网页小游戏案例
提前准备好扫雷的前端文件
[root@hrz3 ~]# ls
saolei.zip
编写Dockerfile
FROM centos:7
RUN rm -rf /etc/yum.repos.d/* # 清理原有yum源
# 添加网络yum源
ADD Centos-7.repo /etc/yum.repos.d/
ADD epel-7.repo /etc/yum.repos.d/
RUN yum -y install unzip tomcat # 安装必要软件
WORKDIR /var/lib/tomcat/webapps/ # 设置工作目录
ADD saolei.zip . # 添加扫雷游戏文件
RUN unzip saolei.zip && mv saolei ROOT # 解压并重命名为ROOT(作为默认应用)
ADD init.sh /init.sh # 添加启动脚本
EXPOSE 8080
CMD ["/bin/bash","/init.sh"] # 使用启动脚本运行
构建saolei镜像
[root@hrz3 ~]# docker build -t saolei:v1 .
[+] Building 0.0s (14/14) FINISHED docker:default=> [internal] load build definition from Dockerfile 0.0s=> => transferring dockerfile: 338B 0.0s=> [internal] load metadata for docker.io/library/centos:7 0.0s=> [internal] load .dockerignore 0.0s=> => transferring context: 2B 0.0s=> [1/9] FROM docker.io/library/centos:7 0.0s=> [internal] load build context 0.0s=> => transferring context: 123B 0.0s=> CACHED [2/9] RUN rm -rf /etc/yum.repos.d/* 0.0s=> CACHED [3/9] ADD Centos-7.repo /etc/yum.repos.d/ 0.0s=> CACHED [4/9] ADD epel-7.repo /etc/yum.repos.d/ 0.0s=> CACHED [5/9] RUN yum -y install unzip tomcat 0.0s=> CACHED [6/9] WORKDIR /var/lib/tomcat/webapps/ 0.0s=> CACHED [7/9] ADD saolei.zip . 0.0s=> CACHED [8/9] RUN unzip saolei.zip && mv saolei ROOT 0.0s=> CACHED [9/9] ADD init.sh /init.sh 0.0s=> exporting to image 0.0s=> => exporting layers 0.0s=> => writing image sha256:3a4bc4a8f28bd984f80e29f90805a2ee5bfd11b14a1e5c00c2c6b0943 0.0s=> => naming to docker.io/library/saolei:v1
查看是否构建成功
[root@hrz3 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
saolei v1 3a4bc4a8f28b 46 minutes ago 716MB
创建扫雷容器测试
[root@hrz3 ~]# docker run -itd --name saolei -P saolei:v1
a0452dd6abfcfec0d6b080129ee9aae2da7d69f2966eaf476b128572c06fbdad
[root@hrz3 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a0452dd6abfc saolei:v1 "/bin/bash /init.sh" 3 seconds ago Up 3 seconds 0.0.0.0:32772->8080/tcp, :::32772->8080/tcp saolei
访问网页http://192.168.100.30:32772/saolei.jsp
可道云案例
[root@hrz3 ~]# cd /opt
[root@hrz3 opt]# mkdir dockerfile
[root@hrz3 opt]# cd dockerfile/
[root@hrz3 dockerfile]# mkdir kod
[root@hrz3 dockerfile]# cd kod/
[root@hrz3 kod]# pwd
/opt/dockerfile/kod
将需要的文件下到当前目录下
[root@hrz3 kod]# ls
Centos-7.repo epel-7.repo kodexplorer4.40.zip nginx.conf
nginx.conf核心配置
[root@hrz3 kod]# cat nginx.conf
worker_processes 1;
events { worker_connections 1024;
}
http {include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name localhost; location / { root /code; index index.php index.html index.htm; }location ~ \.php$ { root /code; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /code$fastcgi_script_name; include fastcgi_params; }}
}
编写dockerfile
[root@hrz3 kod]# vim dockerfile
FROM centos:7
RUN rm -rf /etc/yum.repos.d/*
ADD Centos-7.repo /etc/yum.repos.d/
ADD epel-7.repo /etc/yum.repos.d/
RUN yum -y install nginx php-fpm php-gd php-mbstring unzip
RUN sed -i '/^user/c user=nginx' /etc/php-fpm.d/www.conf
RUN sed -i '/^group/c group=nginx' /etc/php-fpm.d/www.conf
COPY nginx.conf /etc/nginx/nginx.conf
RUN mkdir /code
WORKDIR /code
ADD kodexplorer4.40.zip .
RUN unzip kodexplorer4.40.zip
RUN chown -R nginx.nginx .
ADD init.sh /init.sh
EXPOSE 80
CMD ["/bin/bash","/init.sh"]
编写init脚本
[root@hrz3 kod]# vim init.sh
#!/bin/bash
php-fpm -D
nginx -g 'daemon off;'
创建可道云镜像
[root@hrz3 kod]# docker build -t kod:v1 .
[+] Building 0.1s (19/19) FINISHED docker:default=> [internal] load build definition from dockerfile 0.0s=> => transferring dockerfile: 543B 0.0s=> [internal] load metadata for docker.io/library/centos:7 0.0s=> [internal] load .dockerignore 0.0s=> => transferring context: 2B 0.0s=> [ 1/14] FROM docker.io/library/centos:7 0.0s=> [internal] load build context 0.0s=> => transferring context: 163B 0.0s=> CACHED [ 2/14] RUN rm -rf /etc/yum.repos.d/* 0.0s=> CACHED [ 3/14] ADD Centos-7.repo /etc/yum.repos.d/ 0.0s=> CACHED [ 4/14] ADD epel-7.repo /etc/yum.repos.d/ 0.0s=> CACHED [ 5/14] RUN yum -y install nginx php-fpm php-gd php-mbstring unzip 0.0s=> CACHED [ 6/14] RUN sed -i '/^user/c user=nginx' /etc/php-fpm.d/www.conf 0.0s=> CACHED [ 7/14] RUN sed -i '/^group/c group=nginx' /etc/php-fpm.d/www.conf 0.0s=> CACHED [ 8/14] COPY nginx.conf /etc/nginx/nginx.conf 0.0s=> CACHED [ 9/14] RUN mkdir /code 0.0s=> CACHED [10/14] WORKDIR /code 0.0s=> CACHED [11/14] ADD kodexplorer4.40.zip . 0.0s=> CACHED [12/14] RUN unzip kodexplorer4.40.zip 0.0s=> CACHED [13/14] RUN chown -R nginx.nginx . 0.0s=> CACHED [14/14] ADD init.sh /init.sh 0.0s=> exporting to image 0.0s=> => exporting layers 0.0s=> => writing image sha256:2c901cc19f0b8943fb6edd1aa1ab04a49faa4bb25f071bf9b2a8f5e9a 0.0s=> => naming to docker.io/library/kod:v1 0.0s
创建可道云容器
[root@hrz3 kod]# docker run -itd --name kod -P kod:v1
41b32c31657e46060311b9a424efb83fe64f2762554d5d2b95197db46cf1738e
[root@hrz3 kod]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
41b32c31657e kod:v1 "/bin/bash /init.sh" 3 minutes ago Up 3 minutes 0.0.0.0:32775->80/tcp, :::32775->80/tcp kod
访问192.168.100.30:32775
kod]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
41b32c31657e kod:v1 “/bin/bash /init.sh” 3 minutes ago Up 3 minutes 0.0.0.0:32775->80/tcp, :::32775->80/tcp kod
访问192.168.100.30:32775