Dockerfile镜像实例
Dockerfile镜像实例
一、构建SSH镜像
1. 建立工作目录
[root@docker ~]# mkdir /opt/sshd
[root@docker ~]# cd /opt/sshd
[root@docker sshd]# vim Dockerfile
FROM centos:7
#第一行必须指明基于的基础镜像
MAINTAINER this is ssh image <test>
RUN yum -y update;\
yum install -y openssh* net-tools lsof telnet passwd;\
echo '123456' | passwd --stdin root;\
sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config;\
#不使用PAM认证
sed -ri '/^session\s+required\s+pam_loginuid.so/ s/^/#/' /etc/pam.d/sshd;\
#取消pam限制
ssh-keygen -t rsa -A;\
#生成密钥认证文件
mkdir -p /root/.ssh;\
chown root.root /root;\
chmod 700 /root/.ssh
EXPOSE 22
CMD ["/usr/sbin/sshd","-D"]
#/usr/sbin/sshd -D用于前台启动sshd服务
2. 生成镜像
[root@docker sshd]# docker build -t sshd:test .
[root@docker sshd]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
sshd test beca19c54c1c About a minute ago 438MB
httpd test2 6440a6fa57e0 44 minutes ago 623MB
httpd test1 5ebb94751288 47 minutes ago 623MB
debian test f7fd702b88cc 4 hours ago 215MB
centos test1 3e6e91b628ef 5 hours ago 204MB
nginx latest 87a94228f133 33 hours ago 133MB
centos 7 eeb6ee3f44bd 3 weeks ago 204MB
3. 启动容器并修改root密码
启动容器
[root@docker sshd]# docker run -itd --name sshd -P sshd:test
e563038d8ba40b85f8888046a0c0f2316056aaecdf747734c269613f73861897
[root@docker sshd]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e563038d8ba4 sshd:test "/usr/sbin/sshd -D" 8 seconds ago Up 7 seconds 0.0.0.0:49155->22/tcp, :::49155->22/tcp sshd
ssh登录后修改root密码
[root@docker sshd]# ssh localhost -p 49154
The authenticity of host '[localhost]:49154 ([::1]:49154)' can't be established.
ECDSA key fingerprint is SHA256:rNKUxooLUZXzxxNUTnlROAlwc17hfKwLDTfXn6r8qb8.
ECDSA key fingerprint is MD5:81:e4:46:dd:c1:04:7c:aa:00:a9:16:a4:a2:53:bc:c3.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[localhost]:49154' (ECDSA) to the list of known hosts.
root@localhost's password:
[root@ec51447ac2a3 ~]# echo '654321' | passwd --stdin root
Changing password for user root.
passwd: all authentication tokens updated successfully.
二、systemctl镜像
1. 建立工作目录
[root@docker ~]# mkdir /opt/systemctl
[root@docker ~]# cd /opt/systemctl
[root@docker systemctl]# vim Dockerfile
FROM sshd:test
MAINTAINER this is systemctl iamge <test>
ENV container docker
#除了systemd-tmpfiles-setup.service,删除其他所有文件
RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == systemd-tmpfiles-setup.service ] || rm -f $i; done);\
rm -f /lib/systemd/system/multi-user.target.wants/*;\
rm -f /lib/systemd/system/*.wants/*;\
rm -f /lib/systemd/system/local-fs.target.wants/*;\
rm -f /lib/systemd/system/sockets.target.wants/*udev*;\
rm -f /lib/systemd/system/sockets.target.wants/*initctl*;\
rm -f /lib/systemd/system/basic.target.wants/*;\
rm -f /lib/systemd/system/anaconda.target.wants/*;
VOLUME [ "/sys/fs/cgroup" ]
CMD [ "/usr/sbin/init" ]
2. 生成镜像
[root@docker systemctl]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
systemctl test ef46e114991b 10 seconds ago 438MB
sshd test beca19c54c1c 19 hours ago 438MB
httpd test2 6440a6fa57e0 19 hours ago 623MB
httpd test1 5ebb94751288 19 hours ago 623MB
debian test f7fd702b88cc 23 hours ago 215MB
centos test1 3e6e91b628ef 24 hours ago 204MB
nginx latest 87a94228f133 2 days ago 133MB
centos 7 eeb6ee3f44bd 4 weeks ago 204MB
3. 运行镜像容器
[root@docker systemctl]# docker run -d --privileged --name systemctl -P -v /sys/fs/cgroup:/sys/fs/cgroup:ro systemctl:test
#启动容器,并挂载宿主机目录挂载到容器中并进行初始化
#--privileged:使container内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限。
2fab83d597621709eeee0c5e544334b5f85767bdacb1421842e0f4842b1176ee
[root@docker systemctl]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2fab83d59762 systemctl:test "/usr/sbin/init" 16 seconds ago Up 14 seconds 0.0.0.0:49157->22/tcp, :::49157->22/tcp systemctl
e563038d8ba4 sshd:test "/usr/sbin/sshd -D" 18 minutes ago Up 18 minutes 0.0.0.0:49155->22/tcp, :::49155->22/tcp sshd
4. 测试容器systemctl
[root@docker systemctl]# docker exec -it systemctl bash
[root@2fab83d59762 /]# systemctl status sshd
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2021-10-14 05:56:07 UTC; 2min 20s ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 17 (sshd)
CGroup: /docker/2fab83d597621709eeee0c5e544334b5f85767bdacb1421842e0f4842b1176ee/system.slice/sshd.service
└─17 /usr/sbin/sshd -D
[root@2fab83d59762 /]# systemctl stop sshd
[root@2fab83d59762 /]# systemctl start sshd
[root@2fab83d59762 /]# systemctl status sshd
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2021-10-14 05:58:43 UTC; 2s ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 39 (sshd)
CGroup: /docker/2fab83d597621709eeee0c5e544334b5f85767bdacb1421842e0f4842b1176ee/system.slice/sshd.service
└─39 /usr/sbin/sshd -D
三、Nginx镜像
1. 建立工作目录
[root@docker ~]# mkdir /opt/nginx
[root@docker ~]# cd /opt/nginx/
[root@docker nginx]# rz -E
#传入nginx安装包nginx-1.12.0.tar.gz
rz waiting to receive.
2. 编写Dockerfile脚本
[root@docker nginx]# vim Dockerfile
FROM centos:7
#基于基础镜像
MAINTAINER this is nginx image <test>
#用户信息
RUN yum -y update;yum install -y pcre-devel zlib-devel gcc gcc-c++ make;useradd -M -s /sbin/nologin nginx
ADD nginx-1.12.0.tar.gz /opt/
#添加环境包,上传nginx软件压缩包并解压
WORKDIR /opt/nginx-1.12.0
#指定工作目录
RUN ./configure\
--prefix=/usr/local/nginx\
--user=nginx\
--group=nginx\
--with-http_stub_status_module;make;make install
ENV PATH /usr/local/nginx/sbin:$PATH
EXPOSE 80
EXPOSE 443
#指定http和https端口
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf
ADD run.sh /run.sh
#添加宿主机中run.sh
RUN chmod 755 /run.sh
CMD [ "/run.sh" ]
3. 编写run.sh启动脚本
[root@docker nginx]# vim run.sh
#!/bin/bash
/usr/local/nginx/sbin/nginx
4. 生成镜像
[root@docker nginx]# docker build -t nginx:test .
[root@docker nginx]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx test a8b4c04322fc 10 seconds ago 545MB
systemctl test ef46e114991b 2 hours ago 438MB
sshd test beca19c54c1c 20 hours ago 438MB
httpd test2 6440a6fa57e0 21 hours ago 623MB
httpd test1 5ebb94751288 21 hours ago 623MB
debian test f7fd702b88cc 25 hours ago 215MB
centos test1 3e6e91b628ef 26 hours ago 204MB
nginx latest 87a94228f133 2 days ago 133MB
centos 7 eeb6ee3f44bd 4 weeks ago 204MB
5. 运行镜像容器
[root@docker nginx]# docker run -d --name nginx -P nginx:test
66ac671b3766ce71422c0998807c609a07eead5d4c221ee97e4a75f46afe13bf
[root@docker nginx]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
66ac671b3766 nginx:test "/run.sh" 7 seconds ago Up 5 seconds 0.0.0.0:49163->80/tcp, :::49163->80/tcp, 0.0.0.0:49162->443/tcp, :::49162->443/tcp nginx
2fab83d59762 systemctl:test "/usr/sbin/init" 2 hours ago Up 2 hours 0.0.0.0:49157->22/tcp, :::49157->22/tcp systemctl
e563038d8ba4 sshd:test "/usr/sbin/sshd -D" 2 hours ago Up 2 hours 0.0.0.0:49155->22/tcp, :::49155->22/tcp sshd
6. 验证
[root@docker nginx]# curl http://192.168.122.10:49163
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
四、Tomcat镜像
1. 建立工作目录
[root@docker ~]# mkdir /opt/tomcat
[root@docker ~]# cd /opt/tomcat
[root@docker tomcat]# rz -E
rz waiting to receive.
#传入jdk安装包jdk-8u91-linux-x64.tar.gz
[root@docker tomcat]# rz -E
rz waiting to receive.
#传入tomcat安装包apache-tomcat-8.5.16.tar.gz
2. 编写Dockerfile脚本
[root@docker tomcat]# vim Dockerfile
FROM centos:7
MAINTAINER this is tomcat image <test>
ADD jdk-8u91-linux-x64.tar.gz /usr/local/
WORKDIR /usr/local/
RUN mv jdk1.8.0_91 /usr/local/java
ENV JAVA_HOME /usr/local/java
ENV JRE_HOME ${JAVA_HOME}/jre
ENV CLASSPATH .:${JAVA_HOME}/lib:${JRE_HOME}/lib
ENV PATH $JAVA_HOME/bin:$PATH
ADD apache-tomcat-8.5.16.tar.gz /usr/local/
WORKDIR /usr/local/
RUN mv apache-tomcat-8.5.16 /usr/local/tomcat
EXPOSE 8080
ENTRYPOINT [ "/usr/local/tomcat/bin/catalina.sh","run" ]
3. 生成镜像
[root@docker tomcat]# docker build -t tomcat:test .
[root@docker tomcat]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat test 8a7be313dd18 33 seconds ago 960MB
nginx test a8b4c04322fc 25 minutes ago 545MB
systemctl test ef46e114991b 2 hours ago 438MB
sshd test beca19c54c1c 21 hours ago 438MB
httpd test2 6440a6fa57e0 21 hours ago 623MB
httpd test1 5ebb94751288 21 hours ago 623MB
debian test f7fd702b88cc 25 hours ago 215MB
centos test1 3e6e91b628ef 26 hours ago 204MB
nginx latest 87a94228f133 2 days ago 133MB
centos 7 eeb6ee3f44bd 4 weeks ago 204MB
4. 运行镜像容器
[root@docker tomcat]# docker run -d --name tomcat -P tomcat:test
35fef1ece2a3f1872ce0692da28f8e662e329d0e5a76a003a433fd5f72a5f1bb
[root@docker tomcat]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
35fef1ece2a3 tomcat:test "/usr/local/tomcat/b…" 6 seconds ago Up 5 seconds 0.0.0.0:49165->8080/tcp, :::49165->8080/tcp tomcat
66ac671b3766 nginx:test "/run.sh" 25 minutes ago Up 25 minutes 0.0.0.0:49163->80/tcp, :::49163->80/tcp, 0.0.0.0:49162->443/tcp, :::49162->443/tcp nginx
2fab83d59762 systemctl:test "/usr/sbin/init" 2 hours ago Up 2 hours 0.0.0.0:49157->22/tcp, :::49157->22/tcp systemctl
e563038d8ba4 sshd:test "/usr/sbin/sshd -D" 2 hours ago Up 2 hours 0.0.0.0:49155->22/tcp, :::49155->22/tcp sshd
5. 测试

Dockerfile镜像实例的更多相关文章
- Dockerfile镜像的制作
Dockerfile镜像的制作 如果学习Docker,那么制作镜像这一步肯定不能少的,别人给你的是环境,而你自己做的才是你最终需要的东西,接下来就记录一下如何制作一个满足自己的镜像,我们使用docke ...
- dockerfile镜像设置中文
一.dockerfile镜像设置中文 centos镜像默认不支持中文,把下面的内容加到dockerfile即可 # 修改时区 RUN rm -rf /etc/localtime && ...
- 7.云原生之Docker容器Dockerfile镜像构建浅析与实践
转载自:https://www.bilibili.com/read/cv15220707/?from=readlist Dockerfile 镜像构建浅析与实践 描述:Dockerfile是一个文本格 ...
- dockerfile 镜像构建
1.镜像的构建有手动与自动方式,这里我们介绍自动化的构建方式 ,dockerfile常用指令如下 2.构建指令build Usage: docker image build [OPTIONS] PAT ...
- 基于Dockerfile镜像制作的基本操作
一.使用Dockerfile制作镜像 前面的博客中已经介绍了如何基于容器制作镜像,此方法的原理是使用一个正在运行的容器,根据生产所需进行配置更改等操作后,使其满足生产环境,再将这个容器打包制作为镜像, ...
- Docker:dockerfile镜像的分层 [九]
一.docker镜像的分层 1.图像呈现 2.命令呈现 [root@oldboy kod]# docker image history kod:v1 IMAGE CREATED CREATED BY ...
- Docker dockerfile镜像编码
一. 大多数docker基础镜像使用locale查看编码,发现默认编码都是POSIX,这会导致中文乱码.解决方法如下: 二.首先使用locale -a查看容器所有语言环境 三.dockerfile中加 ...
- Dockerfile镜像优化,减小镜像
前言镜像的优化注意几条: 选择最精简的基础镜像减少镜像的层数清理镜像构建的中间产物注意优化网络请求尽量去用构建缓存使用多阶段构建镜像接下来我们以rhel7镜像构建容器,并在容器中安装nginx的源码包 ...
- dockerfile 镜像 指定虚拟机的内存
dockerfile eg: # sea, FROM frolvlad/alpine-oraclejdk8:slim #add volume VOLUME /tmp #add project ADD ...
随机推荐
- css 快速入门 系列 —— 浮动
浮动 以 mdn float 文档 为基础,逐一介绍浮动的本质.浮动的诸多特性.清除浮动以及块格式化上下文(bfc). 概念 当一个元素浮动之后,它会被移出正常的文档流,然后向左或者向右平移,一直平移 ...
- SpringCloud创建Config Client配置读取
1.说明 本文详细介绍配置中心客户端使用方法, 即Config Client到Config Server读取配置, 这里以创建Config Client服务为例, 基于已经创建好的Config Ser ...
- LDAP理解要点
1.介绍 LDAP(Lightweight Directory Access Protocol)是"轻量级目录访问协议", 是一个用于访问"目录服务器"(Dir ...
- 初识python: 列表(list)
使用列表函数写一个"购物车"小程序: #!/user/bin env python # author:Simple-Sir # 20180908 ''' 需求: 1.启动程序后,让 ...
- linux 设置root 密码
指令意思: sudo -i 是 切换到root权限 ,如果没有密码,则直接可以操作,有密码则会要求输入密码 sudo passwd root 是修改密码指令 ,回车后 提示输入新密码 新密码需要输 ...
- Vue系列教程(一)之初识Vue
一.Vue和MVVM Vue是一个渐进式的js框架,只注重视图层,结合了HTML+CSS+JS,非常的易用,并且有很好的生态系统,而且vue体积很小,速度很快,优化很到位. Vue技术周四MVVM开发 ...
- 自定义Nginx日志格式获取IP地址的省市份信息
注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6806672112477012493/ 在linux中nginx日志产生的格式是下面的配置: $remote_add ...
- axios发送两次请求问题解决
在使用axios的过程中,会发送两次请求. 看了下是因为有一个请求是OPTIONS来判断跨域的时候让不让发送请求的. 这个不算是一个bug,但是发送两个请求着实让人看着不舒服.于是修改了下,原来的请求 ...
- Spring系列1:Spring基本概念
本文内容 什么是Spring? 为什么学Spring? 本系列包含哪些技术? 本系列适合哪些人? 什么是Spring? 基本概念 Spring 框架为现代基于 Java 的企业应用程序提供了一个全面的 ...
- 《剑指offer》面试题43. 1~n整数中1出现的次数
问题描述 输入一个整数 n ,求1-n这n个整数的十进制表示中1出现的次数. 例如,输入12,1-12这些整数中包含1 的数字有1.10.11和12,1一共出现了5次. 示例 1: 输入:n = 12 ...