Docker安装mysql以及tomcat

CentOS Docker 安装

Docker支持以下的CentOS版本:

  • CentOS 7.3 (64-bit)

前提条件

目前,CentOS 仅发行版本中的内核支持 Docker。

Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上。

Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系统为64位、系统内核版本为 2.6.32-431 或者更高版本。


使用 yum 安装(CentOS 7下)

Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。

通过 uname -r 命令查看你当前的内核版本

[root@runoob ~]# uname -r 3.10.0-327.el7.x86_64

安装 Docker

Docker 软件包和依赖包已经包含在默认的 CentOS-Extras 软件源里,安装命令如下:

[root@runoob ~]# yum -y install docker-io

安装完成。

启动 Docker 后台服务

[root@runoob ~]# service docker start

测试运行 hello-world

[root@runoob ~]#docker run hello-world

由于本地没有hello-world这个镜像,所以会下载一个hello-world的镜像,并在容器内运行。


使用脚本安装 Docker

1、使用 sudo 或root 权限登录 Centos。

2、确保 yum 包更新到最新。

$ sudo yum update

3、执行 Docker 安装脚本。

$ curl -fsSL https://get.docker.com/ | sh

执行这个脚本会添加 docker.repo 源并安装 Docker。

4、启动 Docker 进程。

$ sudo service docker start

5、验证 docker 是否安装成功并在容器中执行一个测试的镜像。

$ sudo docker run hello-world

docker ps

到此,docker 在 CentOS 系统的安装完成。


镜像加速

鉴于国内网络问题,后续拉取 Docker 镜像十分缓慢,我们可以需要配置加速器来解决,我使用的是网易的镜像地址:http://hub-mirror.c.163.com。

新版的 Docker 使用 /etc/docker/daemon.json(Linux) 或者%programdata%\docker\config\daemon.json(Windows)来配置 Daemon。

请在该配置文件中加入(没有该文件的话,请先建一个):

{

 "registry-mirrors": ["http://hub-mirror.c.163.com"]

}

Docker 安装 MySQL

方法一、通过 Dockerfile构建

创建Dockerfile

首先,创建目录mysql,用于存放后面的相关东西。

runoob@runoob:~$ mkdir -p ~/mysql/data ~/mysql/logs ~/mysql/conf

data目录将映射为mysql容器配置的数据文件存放路径

logs目录将映射为mysql容器的日志目录

conf目录里的配置文件将映射为mysql容器的配置文件

进入创建的mysql目录,创建Dockerfile

FROM debian:jessie
 
# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
RUN groupadd -r mysql && useradd -r -g mysql mysql
 
# add gosu for easy step-down from root
ENV GOSU_VERSION 1.7
RUN set -x \
    && apt-get update && apt-get install -y --no-install-recommends ca-certificates wget && rm -rf /var/lib/apt/lists/* \
    && wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture)" \
    && wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture).asc" \
    && export GNUPGHOME="$(mktemp -d)" \
    && gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \
    && gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu \
    && rm -r "$GNUPGHOME" /usr/local/bin/gosu.asc \
    && chmod +x /usr/local/bin/gosu \
    && gosu nobody true \
    && apt-get purge -y --auto-remove ca-certificates wget
 
RUN mkdir /docker-entrypoint-initdb.d
 
# FATAL ERROR: please install the following Perl modules before executing /usr/local/mysql/scripts/mysql_install_db:
# File::Basename
# File::Copy
# Sys::Hostname
# Data::Dumper
RUN apt-get update && apt-get install -y perl pwgen --no-install-recommends && rm -rf /var/lib/apt/lists/*
 
# gpg: key 5072E1F5: public key "MySQL Release Engineering <mysql-build@oss.oracle.com>" imported
RUN apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys A4A9406876FCBD3C456770C88C718D3B5072E1F5
 
ENV MYSQL_MAJOR 5.6
ENV MYSQL_VERSION 5.6.31-1debian8
 
RUN echo "deb http://repo.mysql.com/apt/debian/ jessie mysql-${MYSQL_MAJOR}" > /etc/apt/sources.list.d/mysql.list
 
# the "/var/lib/mysql" stuff here is because the mysql-server postinst doesn't have an explicit way to disable the mysql_install_db codepath besides having a database already "configured" (ie, stuff in /var/lib/mysql/mysql)
# also, we set debconf keys to make APT a little quieter
RUN { \
        echo mysql-community-server mysql-community-server/data-dir select ''; \
        echo mysql-community-server mysql-community-server/root-pass password ''; \
        echo mysql-community-server mysql-community-server/re-root-pass password ''; \
        echo mysql-community-server mysql-community-server/remove-test-db select false; \
    } | debconf-set-selections \
    && apt-get update && apt-get install -y mysql-server="${MYSQL_VERSION}" && rm -rf /var/lib/apt/lists/* \
    && rm -rf /var/lib/mysql && mkdir -p /var/lib/mysql /var/run/mysqld \
    && chown -R mysql:mysql /var/lib/mysql /var/run/mysqld \
# ensure that /var/run/mysqld (used for socket and lock files) is writable regardless of the UID our mysqld instance ends up having at runtime
    && chmod 777 /var/run/mysqld
 
# comment out a few problematic configuration values
# don't reverse lookup hostnames, they are usually another container
RUN sed -Ei 's/^(bind-address|log)/#&/' /etc/mysql/my.cnf \
    && echo 'skip-host-cache\nskip-name-resolve' | awk '{ print } $1 == "[mysqld]" && c == 0 { c = 1; system("cat") }' /etc/mysql/my.cnf > /tmp/my.cnf \
    && mv /tmp/my.cnf /etc/mysql/my.cnf
 
VOLUME /var/lib/mysql
 
COPY docker-entrypoint.sh /usr/local/bin/
RUN ln -s usr/local/bin/docker-entrypoint.sh /entrypoint.sh # backwards compat
ENTRYPOINT ["docker-entrypoint.sh"]
 
EXPOSE 3306
CMD ["mysqld"]

通过Dockerfile创建一个镜像,替换成你自己的名字

runoob@runoob:~/mysql$ docker build -t mysql .

创建完成后,我们可以在本地的镜像列表里查找到刚刚创建的镜像

runoob@runoob:~/mysql$ docker images |grep mysql
mysql               5.6                 2c0964ec182a        3 weeks ago         329 MB

方法二、docker pull mysql

查找Docker Hub上的mysql镜像

runoob@runoob:/mysql$ docker search mysql
NAME                     DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                    MySQL is a widely used, open-source relati...   2529      [OK]       
mysql/mysql-server       Optimized MySQL Server Docker images. Crea...   161                  [OK]
centurylink/mysql        Image containing mysql. Optimized to be li...   45                   [OK]
sameersbn/mysql                                                          36                   [OK]
google/mysql             MySQL server for Google Compute Engine          16                   [OK]
appcontainers/mysql      Centos/Debian Based Customizable MySQL Con...   8                    [OK]
marvambass/mysql         MySQL Server based on Ubuntu 14.04              6                    [OK]
drupaldocker/mysql       MySQL for Drupal                                2                    [OK]
azukiapp/mysql           Docker image to run MySQL by Azuki - http:...   2                    [OK]
...

这里我们拉取官方的镜像,标签为5.6

runoob@runoob:~/mysql$ docker pull mysql:5.6

等待下载完成后,我们就可以在本地镜像列表里查到REPOSITORY为mysql,标签为5.6的镜像。


使用mysql镜像

运行容器

runoob@runoob:~/mysql$ docker run -p 3306:3306 --name mymysql -v /usr/mysql/conf:/etc/mysql/conf.d -v /usr/mysql/logs:/logs -v /usr/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d 容器名Idrunoob@runoob:~/mysql$ 

命令说明:

·        -p 3306:3306:将容器的3306 端口映射到主机的 3306 端口。

·        -v -v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf。

·        -v $PWD/logs:/logs:将主机当前目录下的 logs 目录挂载到容器的 /logs。

·        -v $PWD/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。

·        -e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。

查看容器启动情况

runoob@runoob:~/mysql$ docker ps 
CONTAINER ID    IMAGE         COMMAND                  ...  PORTS                    NAMES
21cb89213c93    mysql:5.6    "docker-entrypoint.sh"    ...  0.0.0.0:3306->3306/tcp   mymysql

 

 

开启远程连接服务

进入mysql容器:

docker exec -itmysql bash 

root@a42f31094df5:/# mysql -uroot -p123456 (mysql -uroot -p ) 

mysql> select host,user,plugin,authentication_string from mysql.user;   

  1. mysql> ALTER user 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';  
  2. Query OK, 0 rows affected (0.01 sec)  
  3. mysql>   
  4. mysql> FLUSH PRIVILEGES;  
  5. Query OK, 0 rows affected (0.01 sec)  
  6.   
  7. mysql>   

 

Docker 安装 Tomcat

方法一、通过 Dockerfile构建

创建Dockerfile

首先,创建目录tomcat,用于存放后面的相关东西。

runoob@runoob:~$ mkdir -p ~/tomcat/webapps ~/tomcat/logs~/tomcat/conf

webapps目录将映射为tomcat容器配置的应用程序目录

logs目录将映射为tomcat容器的日志目录

conf目录里的配置文件将映射为tomcat容器的配置文件

进入创建的tomcat目录,创建Dockerfile

FROM java:8-jre

 

ENV CATALINA_HOME /usr/local/tomcat

ENV PATH $CATALINA_HOME/bin:$PATH

RUN mkdir -p "$CATALINA_HOME"

WORKDIR $CATALINA_HOME

 

# runtime dependencies for Tomcat Native Libraries

# Tomcat Native 1.2+ requires a newer version of OpenSSLthan debian:jessie has available (1.0.2g+)

# see http://tomcat.10.x6.nabble.com/VOTE-Release-Apache-Tomcat-8-0-32-tp5046007p5046024.html(and following discussion)

ENV OPENSSL_VERSION 1.0.2h-1

RUN { \

               echo 'deb http://httpredir.debian.org/debian unstable main'; \

        } >/etc/apt/sources.list.d/unstable.list \

        &&{ \

# add a negative "Pin-Priority" so that wenever ever get packages from unstable unless we explicitly request them

               echo 'Package: *'; \

               echo 'Pin: release a=unstable'; \

                echo 'Pin-Priority: -10'; \

               echo; \

# except OpenSSL, which is the reason we're here

               echo 'Package: openssl libssl*'; \

               echo "Pin: version $OPENSSL_VERSION"; \

               echo 'Pin-Priority: 990'; \

        } >/etc/apt/preferences.d/unstable-openssl

RUN apt-get update && apt-get install -y--no-install-recommends \

               libapr1 \

               openssl="$OPENSSL_VERSION" \

        &&rm -rf /var/lib/apt/lists/*

 

# see https://www.apache.org/dist/tomcat/tomcat-8/KEYS

RUN set -ex \

        &&for key in \

               05AB33110949707C93A279E3D3EFE6B686867BA6 \

               07E48665A34DCAFAE522E5E6266191C37C037D42 \

               47309207D818FFD8DCD3F83F1931D684307A10A5 \

               541FBE7D8F78B25E055DDEE13C370389288584E7 \

               61B832AC2F1C5A90F0F9B00A1C506407564C17A3 \

               79F7026C690BAA50B92CD8B66A3AD3F4F22C4FED \

               9BA44C2621385CB966EBA586F72C284D731FABEE \

               A27677289986DB50844682F8ACB77FC2E86E29AC \

               A9C5DF4D22E99998D9875A5110C01C5A2F6059E7 \

               DCFD35E0BF8CA7344752DE8B6FB21E8933C60243 \

               F3A04C595DB5B6A5F1ECA43E3B7BBB100D811BBE \

               F7DA48BB64BCB84ECBA7EE6935CD23C10D498E23 \

        ; do \

                gpg--keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \

        done

 

ENV TOMCAT_MAJOR 8

ENV TOMCAT_VERSION 8.0.35

ENV TOMCAT_TGZ_URLhttps://www.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz

 

RUN set -x \

        \

        &&curl -fSL "$TOMCAT_TGZ_URL" -o tomcat.tar.gz \

        &&curl -fSL "$TOMCAT_TGZ_URL.asc" -o tomcat.tar.gz.asc \

        &&gpg --batch --verify tomcat.tar.gz.asc tomcat.tar.gz \

        &&tar -xvf tomcat.tar.gz --strip-components=1 \

        &&rm bin/*.bat \

        &&rm tomcat.tar.gz* \

        \

        &&nativeBuildDir="$(mktemp -d)" \

        &&tar -xvf bin/tomcat-native.tar.gz -C "$nativeBuildDir" --strip-components=1\

        &&nativeBuildDeps=" \

                gcc\

               libapr1-dev \

               libssl-dev \

               make \

               openjdk-${JAVA_VERSION%%[-~bu]*}-jdk=$JAVA_DEBIAN_VERSION \

        " \

        &&apt-get update && apt-get install -y --no-install-recommends$nativeBuildDeps && rm -rf /var/lib/apt/lists/* \

        &&( \

               export CATALINA_HOME="$PWD" \

               && cd "$nativeBuildDir/native" \

               && ./configure \

                        --libdir=/usr/lib/jni \

                       --prefix="$CATALINA_HOME" \

                       --with-apr=/usr/bin/apr-1-config \

                       --with-java-home="$(docker-java-home)" \

                       --with-ssl=yes \

               && make -j$(nproc) \

               && make install \

        ) \

        &&apt-get purge -y --auto-remove $nativeBuildDeps \

        &&rm -rf "$nativeBuildDir" \

        &&rm bin/tomcat-native.tar.gz

 

# verify Tomcat Native is working properly

RUN set -e \

        &&nativeLines="$(catalina.sh configtest 2>&1)" \

        &&nativeLines="$(echo "$nativeLines" | grep 'Apache TomcatNative')" \

        &&nativeLines="$(echo "$nativeLines" | sort -u)" \

        &&if ! echo "$nativeLines" | grep 'INFO: Loaded APR based Apache TomcatNative library' >&2; then \

               echo >&2 "$nativeLines"; \

               exit 1; \

        fi

 

EXPOSE 8080

CMD ["catalina.sh", "run"]

通过Dockerfile创建一个镜像,替换成你自己的名字

runoob@runoob:~/tomcat$ docker build -t tomcat .

创建完成后,我们可以在本地的镜像列表里查找到刚刚创建的镜像

runoob@runoob:~/tomcat$ docker images|grep tomcat

tomcat             latest             70f819d3d2d9        7 daysago          335.8 MB

方法二、docker pull tomcat

查找Docker Hub上的tomcat镜像

runoob@runoob:~/tomcat$ docker search tomcat

NAME                      DESCRIPTION                                     STARS     OFFICIAL  AUTOMATED

tomcat                    Apache Tomcat is an open source implementa...   744      [OK]      

dordoka/tomcat            Ubuntu 14.04, Oracle JDK 8and Tomcat 8 ba...   19                   [OK]

consol/tomcat-7.0         Tomcat 7.0.57, 8080, "admin/admin"              16                   [OK]

consol/tomcat-8.0         Tomcat 8.0.15, 8080, "admin/admin"              14                   [OK]

cloudesire/tomcat         Tomcat server, 6/7/8                            8                    [OK]

davidcaste/alpine-tomcat  Apache Tomcat 7/8 using Oracle Java 7/8 wi...   6                    [OK]

andreptb/tomcat           Debian Jessie based image with Apache Tomc...   4                    [OK]

kieker/tomcat                                                             2                    [OK]

fbrx/tomcat               Minimal Tomcat image based on Alpine Linux      2                   [OK]

jtech/tomcat              Latest Tomcat production distribution on l...   1                    [OK]

这里我们拉取官方的镜像

runoob@runoob:~/tomcat$ docker pull tomcat

等待下载完成后,我们就可以在本地镜像列表里查到REPOSITORY为tomcat的镜像。


使用tomcat镜像

运行容器

runoob@runoob:~/tomcat$ docker run --name tomcat -p8080:8080 -v $PWD/test:/usr/local/tomcat/webapps/test -d tomcat 

acb33fcb4beb8d7f1ebace6f50f5fc204b1dbe9d524881267aa715c61cf75320

runoob@runoob:~/tomcat$

命令说明:

-p 8080:8080:将容器的8080端口映射到主机的8080端口

-v $PWD/test:/usr/local/tomcat/webapps/test:将主机中当前目录下的test挂载到容器的/test

查看容器启动情况

runoob@runoob:~/tomcat$ docker ps

CONTAINER ID   IMAGE     COMMAND               ... PORTS                    NAMES

acb33fcb4beb   tomcat    "catalina.shrun"     ...0.0.0.0:8080->8080/tcp   tomcat

通过浏览器访问

 

 

常见命令

查看运行中的容器:

[root@localhost ~]# docker ps

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES

3cdacd3fa9f4        61205f6444f9        "catalina.sh run"        6 minutes ago       Up 6 minutes        0.0.0.0:8080->8080/tcp   tomcat_cxh

9185744a54aa        0d16d0a97dd1        "docker-entrypoint..."   9 minutes ago       Up 9 minutes        0.0.0.0:3306->3306/tcp   mymysql

查看运行中的或者运行过的容器:

[root@localhost ~]# docker ps

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES

3cdacd3fa9f4        61205f6444f9        "catalina.sh run"        6 minutes ago       Up 6 minutes        0.0.0.0:8080->8080/tcp   tomcat_cxh

9185744a54aa        0d16d0a97dd1        "docker-entrypoint..."   9 minutes ago       Up 9 minutes        0.0.0.0:3306->3306/tcp   mymysql

[root@localhost ~]# docker ps -a

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS                    NAMES

3cdacd3fa9f4        61205f6444f9        "catalina.sh run"        7 minutes ago       Up 7 minutes               0.0.0.0:8080->8080/tcp   tomcat_cxh

9185744a54aa        0d16d0a97dd1        "docker-entrypoint..."   10 minutes ago      Up 10 minutes              0.0.0.0:3306->3306/tcp   mymysql

06c504d0446b        0ffa6b88500e        "/bin/bash"              11 days ago        

 

删除不需要的景象:

[root@localhost ~]# docker rm 06c504d0446b

 

进入运行中的容器:

[root@localhost ~]# docker exec -ittomcat_cxh bash

root@3cdacd3fa9f4:/usr/local/tomcat#

 

把文件拷贝到容器中:

[root@localhost ~]# docker cp kite.sqltomcat_cxh:/usr/local/tomcat/webapp/kite

 

命令解析:

docker run -p 3306:3306--name mymysql -v /usr/mysql/conf:/etc/mysql/conf.d -v /usr/mysql/logs:/logs -v/usr/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d 容器名

-p 3306:3306 代表把容器中的3306端口映射到宿主机的3306端口

-name mymysql 代表给启动的容器赋予名字

-v /usr/mysql/conf:/etc/mysql/conf.d把本地的文件映射到容器内的相关路径

-e MYSQL_ROOT_PASSWORD 参数赋值

-d 容器名  代表后台执行

-it /bin/bash 代表开启一个虚拟的终端

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值