用Dockerfile构建常见镜像:SSH/systemctl/Nginx/Tomcat/Mysql

什么是 Dockerfile?

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
在这里插入图片描述

来吧!展示!!

SSH

编写 Dockerfile

[root@5centos opt]# mkdir sshd
[root@5centos opt]# cd sshd/
[root@5centos sshd]#  vim Dockerfile
##基础镜像
FROM centos:7
##描述信息
MAINTAINER openssh
##更新源
RUN yum -y update
##安装环境及软件
RUN yum -y install openssh* net-tools lsof telnet passwd
##设置root密码
RUN echo "123123" | passwd --stdin root
##禁用ssh中的pam验证
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/ssh_config
##创建非对称密钥,并指定文件路径
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
##禁用pam的ssh的pam会话模块
RUN sed -i '12s/^/#/g' /etc/pam.d/sshd
##创建ssh工作目录和权限设置
RUN mkdir -p /root/.ssh && chown root:root /root && chmod 700 /root/.ssh
##开放内部端口
EXPOSE 22
CMD ["/usr/sbin/sshd","-D"]

生成镜像

[root@5centos sshd]# docker build -t sshd:open .
[root@5centos sshd]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
sshd                open                62c4eb232aee        About a minute ago   481MB
centos              7                   7e6257c9f8d8        5 weeks ago  

启动容器,随机端口映射

[root@5centos sshd]# docker run -d -P sshd:open 
c4e98e6e86286b8e66c1325b643f3e0b9ba0aa9797ea19d6b2339002610af8d7
[root@5centos sshd]# docker ps -a
CONTAINER ID        IMAGE               COMMAND               CREATED              STATUS              PORTS                   NAMES
c4e98e6e8628        sshd:open           "/usr/sbin/sshd -D"   About a minute ago   Up About a minute   0.0.0.0:32768->22/tcp   friendly_brahmagupta

验证

[root@5centos sshd]# ssh localhost -p 32768
The authenticity of host '[localhost]:32768 ([::1]:32768)' can't be established.
RSA key fingerprint is SHA256:L19kQ0f8kPOctutod+O2x9pAbaqx+3TT8VB1Srj/gSc.
RSA key fingerprint is MD5:f8:6b:2b:c6:c1:d8:b8:9c:41:dc:27:a3:2b:3e:81:2d.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[localhost]:32768' (RSA) to the list of known hosts.
root@localhost's password: 
[root@c4e98e6e8628 ~]# 

systemctl

[root@5centos opt]# mkdir system
[root@5centos opt]# cd system/
[root@5centos system]# vim Dockerfile
FROM sshd:open
MAINTAINER sshd:open systemctl
ENV container docker
RUN yum -y install vim
##执行先到指定目录,进行for循环遍历目录下所有文件并删除指定的文件。之后进行一系列的删除
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 /etc/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" ]
##init指执行初始化
CMD ["/usr/sbin/init"]

生成镜像

[root@5centos system]# docker build -t systemctl:open .
[root@5centos system]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
systemctl           open                03a641b3630c        27 seconds ago      592MB
sshd                open                62c4eb232aee        10 minutes ago      481MB
centos              7                   7e6257c9f8d8        5 weeks ago  

创建容器

## & 后台运行
[root@5centos system]# docker run --privileged -it --name systemctl -v /sys/fs/cgroup:/sys/fs/cgroup:ro systemctl:open sbin/init &
[1] 23563

验证

[root@5centos system]# docker exec -it systemctl /bin/bash
[root@502aafc5a788 /]# systemctl start sshd
[root@502aafc5a788 /]# systemctl status sshd
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; disabled; vendor preset: enabled)
   Active: active (running) since Mon 2020-09-21 10:46:46 UTC; 8s ago

Nginx

[root@5centos system]# cd ..
[root@5centos opt]# mkdir nginx
[root@5centos opt]# vim Dockerfile
FROM systemctl:open
MAINTAINER sys from nginx
RUN yum -y install gcc gcc-c++ pcre* make cmake zlib-devel openssh* net-tools 
ADD nginx-1.12.2.tar.gz /usr/local/src
RUN useradd -M -s /sbin/nologin nginx
WORKDIR /usr/local/src/nginx-1.12.2
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
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["/run.sh"]

[root@5centos nginx]# vim run.sh
#!/bin/bash
/usr/local/nginx/sbin/nginx
[root@5centos nginx]# rz -E
rz waiting to receive.
[root@5centos nginx]# ls
Dockerfile  nginx-1.12.2.tar.gz  run.sh

创建镜像

扫描二维码关注公众号,回复: 11783012 查看本文章
[root@5centos nginx]# docker build -t nginx:open .
[root@5centos nginx]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               open                6120905a3254        35 seconds ago      805MB
systemctl           open                03a641b3630c        17 minutes ago 

创建容器,随机端口

[root@5centos nginx]# docker run -itd -P nginx:open /bin/bash
b628f5f5ef1019d5e08f4944c8258ca89928a74398590df43ded4bc7efcc0576
[root@5centos nginx]# docker ps -a
CONTAINER ID        IMAGE               COMMAND               CREATED             STATUS              PORTS                                                                  NAMES
b628f5f5ef10        nginx:open          "/bin/bash"           25 seconds ago      Up 24 seconds       0.0.0.0:32771->22/tcp, 0.0.0.0:32770->80/tcp, 0.0.0.0:32769->443/tcp   quirky_liskov

在这里插入图片描述

Tomcat

创建目录并编写Dockerfile文件,上传相关文件

[root@5centos opt]# mkdir tomcat
[root@5centos opt]# cd tomcat/
[root@5centos tomcat]# vim Dockerfile
FROM centos:7
MAINTAINER TOMCATcentos7
RUN yum -y update
RUN yum -y install jre*
ADD apache-tomcat-9.0.16.tar.gz /opt
RUN mv /opt/apache-tomcat-9.0.16 /usr/local/tomcat9
EXPOSE 8080
ENTRYPOIINT ["/usr/local/tomcat9/bin/catalina.sh","run"]

[root@5centos tomcat]# ls
apache-tomcat-9.0.16.tar.gz  Dockerfile

创建镜像,开启容器

[root@5centos tomcat]# docker build -t tomcat:open .
[root@5centos tomcat]# docker run -it -P tomcat:open /bin/bash
[root@5centos ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                                  NAMES
2b9713c0d05c        tomcat:open         "/usr/local/tomcat9/…"   22 seconds ago      Up 21 seconds       0.0.0.0:32772->8080/tcp                                                elastic_wilbur

在这里插入图片描述

Mysql

[root@5centos opt]# mkdir mysql
[root@5centos opt]# cd mysql/
[root@5centos mysql]# vim Dockerfile
[root@docker tomcat]# mkdir /mysql
[root@docker tomcat]# cd /mysql/
[root@docker mysql]# vim Dockerfile
FROM centos:7
MAINTAINER build image mysqld	<tang>
EXPOSE 3306

ADD mysql-boost-5.7.20.tar.gz /usr/local/src
WORKDIR /usr/local/src/mysql-5.7.20
RUN useradd mysql -M -s /sbin/nologin
RUN yum -y install gcc \
gcc-c++ \
make \
ncurses \
ncurses-devel \
bison \
cmake 
RUN cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=boost \
-DWITH_SYSTEMD=1
RUN make && make install
RUN chown -R mysql:mysql /usr/local/mysql/

#RUN rm -rf /etc/my.cnf
ADD my.cnf /etc/my.cnf	'//也可以先删掉文件,再添加进去'
RUN chown mysql:mysql /etc/my.cnf
ENV PATH $PATH:/usr/local/mysql/bin:/usr/local/mysql/lib
RUN /usr/local/mysql/bin/mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
RUN cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /lib/systemd/system/
ADD run.sh /run.sh
RUN chmod +x /run.sh
#RUN sh /usr/local/src/run.sh
CMD ["/run.sh"]



[root@5centos mysql]# vim my.cnf
[client]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock

[mysql]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock

[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
character_set_server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket = /usr/local/mysql/mysql.sock
server-id = 1
#

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES

[root@5centos mysql]# vim run.sh
#!/bin/bash
/usr/local/mysql/bin/mysqld
[root@5centos mysql]# ls
Dockerfile  my.cnf  mysql-boost-5.7.20.tar.gz  run.sh

生成镜像

##要等很久……因为mysql……
[root@5centos mysql]# docker build -t mysql:open .

生成容器

[root@5centos mysql]# docker run -d -P --privileged mysql:test 
2cae858f9ca5202cdc111b3117b92fcb97b6448e51e8d938a6a9cd6236b783a4

验证

[root@5centos mysql]# docker exec -it 2cae858f9ca5 /bin/bash
[root@2cae858f9ca5 mysql-5.7.20]# mysql -u root -p -P 32769
Enter password: 
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
[root@2cae858f9ca5 mysql-5.7.20]# mysql -u root -p -P 32769
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 5.7.20 Source distribution

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

猜你喜欢

转载自blog.csdn.net/Ora_G/article/details/108715000