Docker 操作指南之使用示例篇
docker 上运行 tomcat
准备 centos 镜像
首先准备一个镜像,现在以 centos 为例:
docker pull centos
最后,使用以下命令查看本地所有的镜像:
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
centos latest 3adb35bd19ee 9 months ago 196.7 MB
准备数据卷
- 宿主机中准备数据卷 /data/app,启动容器时挂载到容器中,这样做可以直接在宿主机上编辑容器内的文件。
mkdir –p /data/container_ap
- 将所需要的软件,放至该目录:
apache-tomcat-7.0.68.tar.gz
jdk1.7.0_11.tar.gz
准备容器
容器是在镜像的基础上来运行的,一旦容器启动了,我们就可以登录到容器中,安装自己所需的软件或应用程序。
- 执行如下命令,启动容器:
docker run -i -t -v /data/container_ap/:/data/ap/ 9951089d4bc9 /bin/bash
相关参数包括:
- -i:表示以“交互模式”运行容器
- -t:表示容器启动后会进入其命令行
- -v:表示需要将本地哪个目录挂载到容器中,格式:-v <宿主机目录>:<容器目录>
- 9951089d4bc9:镜像的IMAGE ID
- /bin/bash:容器启动后运行的命令
- 容器启动后,将进入交互模式:
[root@df0054ec48a6 /]#
这样,容器就启动了。
安装 jdk 及 tomcat
容器启动后,就可以在容器任意执行命令了,下面开始安装 jdk 和 tomcat。
容器中执行如下操作:
- 解压软件
$ cd /data/ap/
$ ls
#会看到apache-tomcat-7.0.68.tar.gz、jdk1.7.0_11.tar.gz已经在里面了
$ tar zxvf jdk1.7.0_11.tar.gz
$ tar apache-tomcat-7.0.68.tar.gz
$ mv apache-tomcat-7.0.68 tomcat
- 设置环境变量
vi ~/.bash_profile
加入如下内容:
export JAVA_HOME=/data/ap/jdk1.7.0_11
export PATH=$JAVA_HOME/bin:$PATH
使环境变量生效
#source ~/.bash_profile
编辑运行脚本
我们需要编写一个运行脚本,当启动容器时,运行该脚本,启动 Tomcat,具体过程如下:
#vi /data/ap/run.sh
加入如下内容:
#!/bin/bash
source ~/.bashrc
sh /data/ap/tomcat/bin/catalina.sh run
注意:这里必须先加载环境变量,然后使用 Tomcat 的运行脚本来启动 Tomcat 服务。此处使用 catalina.sh run 启动,如果使用catalina.sh start 在 docker 中启动不成功,需要将 catalina.sh 文件中的
>> "$CATALINA_OUT" 2>&1 "&"
修改为:
>> "$CATALINA_OUT" 2>&1
最后,为运行脚本添加执行权限:
chmod u+x /root/run.sh
退出容器
当以上步骤全部完成后,可使用 exit 命令,退出容器。
随后,可使用如下命令查看正在运行的容器:
docker ps
此时,您应该看不到任何正在运行的程序,因为刚才已经使用 exit 命令退出的容器,此时容器处于停止状态,可使用如下命令查看所有容器:
docker ps -a
输出如下内容:
创建新的镜像
使用以下命令,根据某个“容器 ID”来创建一个新的“镜像”:
docker commit df0054ec48a6 tomcat7:v0.1
该容器的 ID 是“df0054ec48a6”,所创建的镜像名是“tomcat7:v0.1”,随后可使用镜像来启动tomcat容器。
查看刚创建的镜像
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
tomcat7 v0.1 a43a3722b694 23 seconds ago 194.6 MB
制作 tomcat 新容器
正如上面所描述的那样,我们可以通过“镜像名”或“镜像 ID”来启动容器,与上次启动容器不同的是,我们现在不再进入容器的命令行,而是直接启动容器内部的 Tomcat 服务。此时,需要使用以下命令:
docker run –d \
-p 58080:8080 \
-v /data/container_ap/:/data/ap/ \
--name tomcat_web tomcat7:v0.1 /data/ap/run.sh
相关参数:
- -d:表示以“守护模式”执行
/data/ap/run.sh
脚本,此时 Tomcat控制台不会出现在输出终端上。 - -p:表示宿主机与容器的端口映射,此时将容器内部的 8080 端口映射为宿主机的 58080 端口,这样就向外界暴露了 58080 端口,可通过 Docker 网桥来访问容器内部的 8080 端口了。
- –name:表示容器名称,用一个有意义的名称命名即可。
运行成功后,便可查看该容器的状态:
docker ps
该容器正在后台运行中,如果还想通过交互的方式进行窗口,需要执行如下命令:
$ docker exec -it tomcat_web /bin/bash
[root@3708b0ec85a9 /]#
这样,又可以重新操控容器了。
测试
通过访问 http://192.168.10.20:58080,即可看到熟悉的 tomcat 界面。
变更容器内容
假如有如下场景,你需要增加 tomcat 的管理用户,如何做?进入容器内做?
因为在制作容器时已经加了 -v /data/container_ap/:/data/ap
参数,所以只需要在宿主机主的目录上操作就行。
cd /data/container_ap/tomcat/conf
vi tomcat-users.xml
加入如下内容:
<role rolename="manager-gui"/>
<user username="admin" password="password" roles="manager-gui"/>
加入完成后,需要重启容器使之生效。
docker stop tomcat_web
docker start tomcat_web
启动完成后,访问 tomcat/manager/status
页面,即可输入加入的用户和密码。
通过 supervisor 管理 memcached
docker 中使用 supervisor 时,一定加入如下内容,否则容器不能启动。
nodaemon=true
准备 supervisord.conf
- 创建镜像目录
mkdir –p /data/images/memcached
- 新建 supervisord.conf,放置在容器的 /etc/supervisor 目录。
cd /data/images/memcached
vi supervisord.conf
[unix_http_server]
file=/tmp/supervisor.sock ; (the path to the socket file)
[supervisord]
logfile=/tmp/supervisord.log ; (main log file;default $CWD/supervisord.log)
logfile_maxbytes=50MB ; (max main logfile bytes b4 rotation;default 50MB)
logfile_backups=10 ; (num of main logfile rotation backups;default 10)
loglevel=info ; (log level;default info; others: debug,warn,trace)
pidfile=/tmp/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
nodaemon=true ; (start in foreground if true;default false)
minfds=1024 ; (min. avail startup file descriptors;default 1024)
minprocs=200 ; (min. avail process descriptors;default 200)
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket
[include]
files = /etc/supervisor/conf.d/*.conf
准备 memcached program 配置文件
该配置文件为 supervisor 管理 memcached 的配置文件,放置在容器的 /etc/supervisor/conf.d
目录。
cd /data/images/memcached
vi memcached.conf
[supervisord]
nodaemon=true
[program:memcached]
command=/usr/local/memcached/memcached/bin/memcached -d -m 256 -u root -l 0.0.0.0 -p 11211 -c 2048 -P memcached.pid
process_name=memcached
autostart=true
autorestart=true
注意:
nodaemon 要设置成true,否则容器启动后就会自动退出。
准备所需软件
- 准备安装 supervisor 所需软件,放至镜像目录
meld3-1.0.2.tar.gz
setuptools-0.6c11.tar.gz
supervisor-3.3.1.tar.gz
- 本次使用的 memcached 是在宿主机上编译好的软件,安装目录为
/usr/local/memcached
,打包成memcached.tgz
放至镜像目录
创建 Dockerfile
#cd /data/images/memcached
#vi Dockerfile
FROM centos:centos6
MAINTAINER 7d
RUN mkdir -p /data/soft
COPY meld3-1.0.2.tar.gz /data/soft
COPY setuptools-0.6c11.tar.gz /data/soft
COPY supervisor-3.3.1.tar.gz /data/soft
RUN cd /data/soft && tar zxf setuptools-0.6c11.tar.gz && cd setuptools-0.6c11 && python setup.py build && python setup.py install
RUN cd /data/soft && tar zxvf meld3-1.0.2.tar.gz && cd meld3-1.0.2 && python setup.py install
RUN cd /data/soft && tar zxf supervisor-3.3.1.tar.gz && cd supervisor-3.3.1 && python setup.py install
RUN mkdir -p /etc/supervisor/conf.d
COPY supervisord.conf /etc/supervisor/supervisord.conf
COPY memcached.conf /etc/supervisor/conf.d/memcached.conf
COPY memcached.tgz /usr/local
RUN cd /usr/local && tar zxvf memcached.tgz
EXPOSE 11211
CMD ["/usr/bin/supervisord"]
构建镜像
cd /data/images/memcached
docker build -t="memcached:v0.1" .
得到如下镜像:
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
memcached v0.1 291272444a64 3 seconds ago 212 MB
创建容器
执行如下命令创建容器:
docker run -d -i -t -p 11211:11211 \
--name memcached \
memcached:v0.1
得到如下容器:
可以看到 11211 端口已经开启。
相关系列:
- 点赞
- 收藏
- 关注作者
评论(0)