1. 程式人生 > 其它 >Dockerfile映象例項-(3)

Dockerfile映象例項-(3)

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. 測試