mkdir /opt/sshd cd /opt/sshd vim Dockerfile #指定基础镜像 FROM centos:7 #指定镜像维护人信息 MAINTAINER this is ssh image <dd> #更新镜像yum源 RUN yum -y update #在基于镜像上安装软件 #openssh是SSH协议的免费开源实现 #net-tools组件可支持使用ifconfig命令查看网卡信息 #lsof查看进程打开的文件、打开文件的进程、进程打开的端口 #telnet支持远程登陆 #passwd用于设置密码,更新用户身份令牌 RUN yum -y install openssh* net-tools lsof telnet passwd #更改root用户密码为123456 RUN echo 123456 | passwd --stdin root #将ssh服务端配置文件中所有的UsePAM yes替换为UsePAM no,关闭第三方认证登陆,别人都无法远程登陆该主机 RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config #取消pam限制,\s为空字符,设置一条即可 RUN sed -i '/^session\s\+required\s\+pam_loginuid.so/s/^/#/' /etc/pam.d/sshd #为当前用户(root)创建秘钥对文件,使用rsa算法,-A选项实现的免交互,生成密钥文件 RUN ssh-keygen -t rsa -A #嵌套创建/root/.ssh目录并且将/root目录属主和属组改为root并且为/root/.ssh目录赋权700 RUN mkdir -p /root/.ssh && chown root.root /root && chmod 700 /root/.ssh #指定端口222 EXPOSE 22 #/usr/sbin/sshd -D用于前台启动sshd服务 CMD ["/usr/sbin/sshd", "-D"] #生成镜像 docker build -t sshd:dd . #启动容器并修改root密码 docker run -d --name ssh1 -P sshd:dd docker ps -a ssh localhost -p 49155 #指定IP为本机,可以用localhost代替ip地址或者127.0.0.1都可以
mkdir /opt/systemctl cd /opt/systemctl vim Dockerfile #指定基础镜像为之前的sshd容器镜像 FROM sshd:dd MAINTAINER this is systemctl image <dd> #基础镜像上执行切换到/lib/systemd/system/sysinit.target.wants目录下,for循环遍历该目录下所有文件,如果文件名称不是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 /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命令或ENTRYPOINT 命令会覆盖或者只执行最后一条CMD命令 #CMD ["/usr/sbin/init"] #生成镜像 docker build -t systemctl:dd . #启动容器,挂载宿主机目录挂载到容器中并进行初始化 docker run --privileged -d --name No1 -P -v /sys/fs/cgroup/:/sys/fs/cgroup:ro systemctl:dd /sbin/init #--privileged∶使container内的root拥有真正的root权限,普通用户使用systemctl命令需要root用户密码。否则container内的root只是外部的一个普通用户权限。 #/sys/fs/cgroup:/sys/fs/cgroup:ro∶后面:ro为给予只读的权限 #-d和&都能实现docker容器后台运行 docker ps -a #进入容器可以使用systemctl命令 docker exec -it No1 bash systemctl status sshd
mkdir /opt/tomcat cd /opt/tomcat #将jdk和tomcat源码编译包复制到该目录 vim Dockerfile FROM centos:7 MAINTAINER this is tomcat image <dd> #将源码包复制到镜像中自动进行解压 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 CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar 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 #容器运行默认第一条命令为tomcat前台运行 CMD /usr/local/tomcat/bin/catalina.sh run #创建新镜像 docker build -t tomcat:dd . docker images docker run -d --name tomcat1 -p 3444:8080 tomcat:dd docker ps -a
mkdir /opt/mysql cd /opt/mysql #将mysql-boost-5.7.20.tar.gz源码包复制到该路径中 vim Dockerfile FROM systemctl:dd MAINTAINER this is mysql image <dd> #编译安装需要的工具和环境 RUN yum -y install ncurses ncurses-devel bison cmake pcre-devel zlib-devel gcc gcc-c++ make #建立运行用户 RUN useradd -M -s /sbin/nologin mysql ADD mysql-boost-5.7.20.tar.gz /opt #编译安装模块软件 RUN cd /opt/mysql-5.7.20/;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_EXTRA_CHARSETS=all -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 cd /opt/mysql-5.7.20/;make -j 4 && make install #提前准备好mysql配置文件直接复制进去,或者挂载数据卷的方式 ADD my.cnf /etc/my.cnf #开启mysql端口 EXPOSE 3306 #给予mysql数据目录和配置文件属主和属组 RUN chown -R mysql:mysql /usr/local/mysql/ RUN chown mysql:mysql /etc/my.cnf #设置mysql命令加入系统环境变量 ENV PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH #初始化mysql数据库 RUN /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data #将mysql自带的启动文件复制到系统变量中 RUN cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/ #重新读取启动文件,启动mysql服务,如果该步骤报错可以注释,后期容器需要手动进入容器内执行该命令 RUN systemctl daemon-reload;systemctl start mysqld.service #创建新镜像 docker build -t mysql:dd . docker images #基于镜像创建容器 docker run --name mysql1 -d -P --privileged mysql:dd /usr/sbin/init docker ps -a #进入容器授权远程连接mysql,密码为abc123 docker exec -it a7356f2122c2 /bin/bash mysql -u root -p grant all privileges on *.* to 'root'@'%' identified by 'abc123' grant all privileges on *.* to 'root'@'localhost' identified by 'abc123' flush privileges; create database AAA; #创建一个数据库方便验证 #客户端 在开启一个终端使用mysql命令连接容器内的mysql,如果宿主机没有数据库需要安装mariadb来使用mysql命令 yum -y install mariadb mysql -h 192.168.150.30 -uroot -P 49158 -pabc123