Docker制作镜像
2021-06-30 本文已影响0人
一个小运维
一: commit 打包镜像(适用于制作简单镜像)
docker commit 容器id 新镜像名称:标签
[root@docker-0001 ~]# docker run -it centos:latest
[root@02fd1719c038 ~]# rm -f /etc/yum.repos.d/*.repo
[root@02fd1719c038 ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.myhuaweicloud.com/repo/CentOS-Base-7.repo
[root@02fd1719c038 ~]# yum install -y net-tools vim-enhanced tree bash-completion iproute psmisc && yum clean all
[root@02fd1719c038 ~]# exit
[root@docker-0001 ~]# docker commit 02fd1719c038 myos:latest
二: Dockerfile打包镜像
Dockerfile语法
语法指令 | 语法说明 |
---|---|
FROM | 基础镜像 |
RUN | 制作镜像时执行的命令,可以有多个 |
ADD | 复制文件到镜像,自动解压 |
COPY | 复制文件到镜像,不解压 |
EXPOSE | 声明开放的端口 |
ENV | 设置容器启动后的环境变量 |
WORKDIR | 定义容器默认工作目录(等于cd) |
CMD | 容器启动时执行的命令,仅可以有一条CMD |
使用Dockerfile创建镜像
docker build -t 镜像名称:标签 Dockerfile所在目录
制作apache镜像
CMD 指令可以查看 service 文件的启动命令 ExecStart(/lib/systemd/system/httpd.service)
ENV 环境变量查询服务文件中的环境变量配置文件 EnvironmentFile 指定的文件内容
[root@docker-0001 ~]# mkdir apache; cd apache
[root@docker-0001 apache]# vim Dockerfile
FROM myos:latest
RUN yum install -y httpd php
ENV LANG=C
ADD webhome.tar.gz /var/www/html/
WORKDIR /var/www/html/
EXPOSE 80
CMD ["/usr/sbin/httpd", "-DFOREGROUND"]
# 拷贝 webhome.tar.gz 到当前目录中
[root@docker-0001 apache]# docker build -t myos:httpd .
查看与验证镜像
[root@docker-0001 web]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myos httpd db15034569da 12 seconds ago 412MB
myos latest 867409e412c8 2 hours ago 281MB
[root@docker-0001 web]# docker rm -f $(docker ps -aq)
[root@docker-0001 web]# docker run -itd myos:httpd
[root@docker-0001 web]# curl http://172.17.0.2/info.php
<pre>
Array
(
[REMOTE_ADDR] => 172.17.0.1
[REQUEST_METHOD] => GET
[HTTP_USER_AGENT] => curl/7.29.0
[REQUEST_URI] => /info.php
)
php_host: 6c9e124bee1a
1229
制作php-fpm镜像
[root@docker-0001 ~]# mkdir php
[root@docker-0001 ~]# cd php
[root@docker-0001 php]# vim Dockerfile
FROM myos:latest
RUN yum install -y php-fpm
EXPOSE 9000
CMD ["/usr/sbin/php-fpm", "--nodaemonize"]
[root@docker-0001 php]# docker build -t myos:php-fpm .
验证服务
[root@docker-0001 ~]# docker run -itd myos:php-fpm
deb37734e52651161015e9ce7771381ee6734d1d36bb51acb176b936ab1b3196
[root@docker-0001 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS
deb37734e526 myos:php-fpm "/usr/sbin/php-fpm -…" 17 seconds ago Up 15 seconds
[root@docker-0001 ~]# docker exec -it deb37734e526 /bin/bash
[root@deb37734e526 ~]# ss -ltun
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp LISTEN 0 128 127.0.0.1:9000 *:*
[root@deb37734e526 ~]#
制作nginx镜像
1、制作 nginx 软件包
[root@docker-0001 ~]# yum install -y gcc make pcre-devel openssl-devel
[root@docker-0001 ~]# useradd nginx
[root@docker-0001 ~]# tar -zxvf nginx-1.12.2.tar.gz
[root@docker-0001 ~]# cd nginx-1.12.2
[root@docker-0001 nginx-1.12.2]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module
[root@docker-0001 nginx-1.12.2]# make && make install
# 拷贝 docker-images/info.html和info.php 到 nginx/html 目录下
[root@docker-0001 nginx-1.12.2]# cd /usr/local/
[root@docker-0001 local]# tar czf nginx.tar.gz nginx
2、制作镜像
[root@docker-0001 local]# mkdir /root/nginx
[root@docker-0001 local]# cd /root/nginx
[root@docker-0001 nginx]# cp /usr/local/nginx.tar.gz ./
[root@docker-0001 nginx]# vim Dockerfile
FROM myos:latest
RUN yum install -y pcre openssl && useradd nginx
ADD nginx.tar.gz /usr/local/
EXPOSE 80
WORKDIR /usr/local/nginx/html
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]
[root@docker-0001 nginx]# docker build -t myos:nginx .
验证服务
[root@docker-0001 ~]# docker rm -f $(docker ps -aq)
deb37734e526
[root@docker-0001 ~]# docker run -itd myos:nginx
e440b53a860a93cc2b82ad0367172c344c7207def94c4c438027c60859e94883
[root@docker-0001 ~]# curl http://172.17.0.2/info.html
<html>
<marquee behavior="alternate">
<font size="12px" color=#00ff00>Hello World</font>
</marquee>
</html>