制作基于centos和ubuntu可以ssh连接的容器以及tomcat容器
可以ssh连接的centos容器
参考:http://blog.csdn.net/mexel310/article/details/51705777
一. pull好镜像后,运行容器
1. docker run -d -it <imageID> /bin/bash
-
-i:表示以“交互模式”运行容器
-
-t:表示容器启动后会进入其命令行
这样就能启动一个一直停留在后台运行的Centos了。如果少了/bin/bash的话,Docker会生成一个Container但是马上就停止了,不会一直运行,即使有了-d参数。
2. 然后我们可以进入我们这个Centos
docker attach <ContainerID>
或者使用
docker exec -it <容器名或者ID> /bin/bash
二. 安装基本网络组件
进入Centos后,发现竟然没有ifconfig和ssh
1. ifconfig的安装
yum search ifconfig # 查看需要安装那个软件包
yum install net-tools.x86_64 #安装相关软件包
2. ssh的安装
yum install openssh-server openssh-clients
启动SSH
/usr/sbin/sshd -D #这样启动会失败
解决方法
手动执行/usr/sbin/sshd-keygen -A
再执行/usr/sbin/sshd成功。
三. 将端口映射到宿主机
Ctrl+P+Q #退出,但不停止容器
docker stop <容器ID> #回到Docker下面,停止容器
docker commit <容器ID> <NAME/VERSION> #提交当前容器到镜像
docker run -itd -p 50001:22 <刚才提交的镜像ID> /bin/bash #启动新容器,并且进行端口映射
OK, 现在可以ssh工具访问宿主机的IP端口就可以访问到容器了,用户名和密码要用容器里面的。
我这里就是192.168.99.100:50001
四. 写成一个dockerfile的形式,如下
1. 基于centos
FROM centos MAINTAINER hong "1816635208@qq.com" RUN yum -y install openssh-server;yum clean all RUN mkdir /var/run/sshd RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key RUN /bin/echo 'root:123456'|chpasswd RUN /bin/sed -i 's/.*session.*required.*pam_loginuid.so.*/session optional pam_loginuid.so/g' /etc/pam.d/sshd RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" > /etc/default/locale EXPOSE 22 #暴漏容器端口22 CMD /usr/sbin/sshd -D
生成镜像:docker build -t hong
/centos
:
ssh
.
docker run -d -P --name ssh_test hong
/centos
:
ssh
# -P表示随机分配宿主机端口号到容器的22端口然后ssh连接就好了,主要用户名root,密码是123456
2. 基于ubuntu的ssh可连接容器
FROM ubuntu:trusty RUN apt update #sshd RUN apt install -y openssh-server RUN mkdir /var/run/sshd RUN echo 'root:aaaa' | chpasswd RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config # SSH login fix. Otherwise user is kicked off after login RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd ENV NOTVISIBLE "in users profile" RUN echo "export VISIBLE=now" >> /etc/profile EXPOSE 22 CMD ["/usr/sbin/sshd", "-D"] #https://www.cnblogs.com/xuanmanstein/p/8166210.html
docker搞一个tomcat
1. 把上面网页中的内容编写成dockerfile文件如下
FROM centos ADD ./webapps /opt/tomcat/webapps/ #ADD命令只能用于dockfile所在文件夹的文件或目录 ADD ./apache-tomcat-7.0.81/ /opt/tomcat/ #下载tomcat和jdk到dockerfile所在文件夹 ADD ./jdk1.7.0_80/ /opt/jdk ADD ./run.sh /root RUN chmod +x /root/run.sh EXPOSE 8080
生成镜像:docker build -t tomcat_test1 .
2.生成容器:
1)命令行生成方式:docker run -d -p 58090:8080 --name my_tomcat tomcat_test1 /root/run.sh
2)docker-compose.yml 自动生成,命令为docker-compose up -d,如果修改了文件内容,重新生成的命令为docker-compose -d --build
tomcat: build: .
#image: tomcat_test1 同时使用build和image可以自定义镜像名 ports: - "48080:8080" restart: always container_name: tomcat2 command: /root/run.sh
其中run.sh的内容如下
#!/bin/bash export JAVA_HOME=/opt/jdk/ export PATH=$JAVA_HOME/bin:$PATH sh /opt/tomcat/bin/catalina.sh run
如果想wget下载tomcat容器里面的文件,需要把文件放在webapps目录中的下级目录中,如下
如果想直接下载文件,可以把文件放在webapps的ROOT目录下,比如wget http://192.168.0.242:58080/1.txt
否则需要加上非ROOT目录的其他目录名,比如wget http://192.168.0.242:58080/w/2.txt
dockerfile相关文档
努力生活,融于自然