在已有的docker镜像当中,添加一些自己需要的功能,封装成自己镜像。
例:自定义一个有yum源的centos的镜像
docker run -it docker.io/centos:latest #启动一个容器
yum -y install vim net-tools pstree iproute bash-completion #安装相关软件,最后一个是自动补全
rm -fr /etc/yum.repos.d/*
vim /etc/yum.repos.d/local.repo
[local_repo]
name = xxxx
baseurl = ftp://192.168.1.10/centos-base
enabled = 1
gpgcheck = 0
yum clean all
yum repolist
docker commit 容器id 容器名:标签 #容器保存成镜像
Dockerfile:
制作docker镜像的脚本,名字必须为Dockerfile
语法格式:
FROM:基础镜像
ADD:复制本地文件到镜像中,相当于scp
RUN:制作镜像时执行的命令,命令在容器中执行,在Dockerfile文件中可以有多条
CMD:使用docker run启动容器时执行的命令,在Dockerfile文件中仅能有一条
WORKDIR:定义容器默认工作目录,相当于cd命令
CMD使用方式:CMD ["命令", "参数1", "参数2", "参数n"]--> CMD ["/usr/sbin/sshd", "-D"]
使用CMD运行的就是上帝进程。
例1:使用Dockerfile自定义一个有yum源的centos的镜像
vim Dockerfile
FROM docker.io/centos:latest #选择基础镜像
RUN rm -fr /etc/yum.repos.d/* #制作镜像时,在容器中执行的命令
ADD local.repo /etc/yum.repos.d/local.repo #将本地文件拷贝到容器,本地文件必须和Dockerfile在同一个目录下
RUN yum -y install vim net-tools pstree iproute bash-completion
docker build -t myos:test . #使用Dockerfile创建镜像,在Dockerfile所在的目录下执行
例2:使用Docker自定义一个服务容器,启动容器时,服务也同时启动(ssh服务为例)
vim Dockerfile
# 以下命令在制作镜像时执行
FROM myos:test #基础镜像
RUN yum -y install openssh-server initscripts && sshd-keygen
RUN echo "123456" | passwd --stdin root
# 以下命令在启动容器时执行
# 以下都可以在/usr/lib/systemd/system/xxx.service中找对应的选项
ENV EnvironmentFile=/etc/sysconfig/sshd #环境变量
EXPOSE 22 #开放的端口
CMD ["/usr/sbin/sshd", "-D"] #启动容器时执行的命令
docker build -t mysshd:test . #使用Dockerfile创建镜像,在Dockerfile所在的目录下执行
# 以上为容器创建了一个的root用户设置了密码为123456
# 在使用docker run 启动容器的时候会自动开启ssh服务
# 想要定义其他容器的服务也类似
# 可以在/usr/lib/systemd/system/xxx.service找对应的选项
写总结的第七十四天!!!