Docker 操作指南之使用示例篇

举报
zuozewei 发表于 2021/10/15 13:25:14 2021/10/15
【摘要】 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

准备数据卷

  1. 宿主机中准备数据卷 /data/app,启动容器时挂载到容器中,这样做可以直接在宿主机上编辑容器内的文件。
mkdir –p /data/container_ap
  1. 将所需要的软件,放至该目录:
apache-tomcat-7.0.68.tar.gz
jdk1.7.0_11.tar.gz

准备容器

容器是在镜像的基础上来运行的,一旦容器启动了,我们就可以登录到容器中,安装自己所需的软件或应用程序。

  1. 执行如下命令,启动容器:
docker run -i -t -v /data/container_ap/:/data/ap/ 9951089d4bc9 /bin/bash

相关参数包括:

  • -i:表示以“交互模式”运行容器
  • -t:表示容器启动后会进入其命令行
  • -v:表示需要将本地哪个目录挂载到容器中,格式:-v <宿主机目录>:<容器目录>
    • 9951089d4bc9:镜像的IMAGE ID
    • /bin/bash:容器启动后运行的命令
  1. 容器启动后,将进入交互模式:
[root@df0054ec48a6 /]#

这样,容器就启动了。

安装 jdk 及 tomcat

容器启动后,就可以在容器任意执行命令了,下面开始安装 jdk 和 tomcat。

容器中执行如下操作:

  1. 解压软件
$ 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
  1. 设置环境变量
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

  1. 创建镜像目录
mkdir –p /data/images/memcached
  1. 新建 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,否则容器启动后就会自动退出。

准备所需软件

  1. 准备安装 supervisor 所需软件,放至镜像目录
meld3-1.0.2.tar.gz
setuptools-0.6c11.tar.gz
supervisor-3.3.1.tar.gz
  1. 本次使用的 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 端口已经开启。

相关系列:

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。