GVKun编程网logo

利用 SSH 桥接访问服务器的 Docker 运行的 MySql 服务(ssh连接docker容器)

17

在本文中,我们将给您介绍关于利用SSH桥接访问服务器的Docker运行的MySql服务的详细内容,并且为您解答ssh连接docker容器的相关问题,此外,我们还将为您提供关于docker创建mysql

在本文中,我们将给您介绍关于利用 SSH 桥接访问服务器的 Docker 运行的 MySql 服务的详细内容,并且为您解答ssh连接docker容器的相关问题,此外,我们还将为您提供关于docker 创建 mysql 服务、Docker 安装 MySQL 服务、Docker 容器部署 Mysql 数据库服务器、docker 微服务部署之:四、安装 docker、docker 中安装 mysql 和 jdk1.8、手动构建镜像、部署项目的知识。

本文目录一览:

利用 SSH 桥接访问服务器的 Docker 运行的 MySql 服务(ssh连接docker容器)

利用 SSH 桥接访问服务器的 Docker 运行的 MySql 服务(ssh连接docker容器)

前情提要

docker 的运用越来广泛,许多 IT 公司都已经将自己的服务跑在 Docker 上面。在安全性方面又做了一层防护。比如:跑在 Docker 上的 Mysql 不做外网端口映射,只能在 linux 服务器上或进入 docker 访问 mysql,这样对开发者来说是有些不方便的。 那么,其实这种情况,我们也是有办法可以做到在本地连接 docker 里面的 MySql 数据库的。

环境:

  • Linux 服务器:centos 7.7
  • 服务器 IP:192.168.1.5
  • 容器:docker
  • 实例 IP:172.17.0.2
  • 数据库:mysqld 5.7.28
  • 数据库客户端:navicat ,sqlyog

docker 运行

通常我们运行 docker 实例的命令如:

[root@qinshengfei ~]# docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=attack docker.io/mysql

通常这样运行起来的服务有几个问题

  • 1、没有配置固定 ip,这样一台服务器上跑多个 docker 服务,在以后重启的时候,ip 地址会变
  • 2、ip 没有映射,对生产环境来说这不是问题,测试环境和开发环境,这样就很不方便
  • 所以使用 docker 之前先做规划,是好习惯

客户端配置

sqlyog 配置
  • 1、先配置 SSH 访问 Linux 服务器

  • 2、再配置访问 MySql 的账号密码
navicat 配置
  • 1、先配置 SSH 访问 Linux 服务器

  • 2、再配置访问 MySql 的账号密码

总结

可能出现的问题

  • 1、SSH 访问的账号密码正确与否
  • 2、访问 MySql 的账号密码正确与否
  • 3、运行 Mysql 实例的 docker 实例 ip,是不是正确

docker 创建 mysql 服务

docker 创建 mysql 服务

如下过程,以官方 mysql 5.7 镜像为基础,构建了一个新的 mysql 镜像,仅替换了 mysql 配置文件。

1. 下载 docker mysql 5.7 官方镜像,命令如下:

docker pull mysql:5.7

 下载完成后,查看镜像是否已经存在,如下图:

2. 任意目录下,放置好自己的 mysql 配置文件,名称为 config-file.cnf,并新建文件 Dockerfile,如下图:

3. 在 Dockerfile 文件中,写入如下内容:

FROM mysql:5.7

MAINTAINER shangyingbin

COPY config-file.cnf /etc/mysql/conf.d/

 4. 构建镜像,命令如下:

docker build -t omc/mysql:1.0 .

 结果如下图:

5. 查看镜像,刚刚创建的镜像已经出现在列表中了,如下图:

6. 以此镜像,启动一个容器,命令如下:

docker run --name mysql -e MYSQL_ROOT_PASSWORD=12345 -p 3306:3306 -v /home/docker-mysql-data:/var/lib/mysql/ -d omc/mysql:1.0

 解释:

--name mysql,为容器命名,方便识别,也方便后续的操作,比如启动、停止容器,便可以用名字代表容器,如 docker stop mysql

-e MYSQL_ROOT_PASSWORD=12345,指定 mysql 中 root 用户的密码,为 12345

-p 3306:3306,指定端口映射,将容器内的 3306 端口,映射到本机的 3306 端口,这样外部即可通过本机的 IP 和 3306 端口即可访问数据库了

-v /home/docker-mysql-data:/var/lib/mysql/,将容器内 mysql 的数据目录 /var/lib/mysql,映射到本机的 /home/docker-mysql-data 目录下

7. 查看镜像是否已经启动,命令如下:

8. 可通过 mysql 工具连接此服务,验证服务启动是否正常。

9. 停止服务命令如下:

docker stop mysql

 10. 重新启动服务,命令如下:

docker start mysql

 11. 进入容器,命令如下:

docker exec -it mysql /bin/bash

 12. 在容器内,命令行方式登录 mysql,命令如下:

mysql -h 127.0.0.1 -uroot -p

 提示输入密码,密码即为创建容器时指定的 12345

13. 要退出容器,先退出 mysql,然后直接执行 exit 命令即可,退出后,容器依然正常运行。

Docker 安装 MySQL 服务

Docker 安装 MySQL 服务

一、前言
阅读本文章之前,我们应该先去了解什么是 Docker ,并且在系统中已经安装好了 Docker ,下面我们便尝试安装一个 MySQL 服务。
二、步骤
下载 MySQL 镜像
首先,查看 DockerHub MySQL 的信息
<ignore_js_op>
然后,选择我们需要的版本拉取镜像
命令:docker pull mysql
<ignore_js_op>
查看下载好的 mysql 镜像
<ignore_js_op>
创建并启动一个 MySQL 容器
命令:docker run --name itsource-mysql -e MYSQL_ROOT_PASSWORD=solargen -p 3306:3306 -d mysql
<ignore_js_op>
-name : 容器名称
-e :  配置 mysql 的登录密码
-p : 端口映射
-d :  容器启动后输出完成 ID
查看容器的运行状态
命令:docker ps
<ignore_js_op>
进入容器
命令:docker exec -it  容器 id bash
<ignore_js_op>
进入 MySQL
<ignore_js_op>
对远程进行授权
<ignore_js_op>
更改密码加密规则
<ignore_js_op>
更改 root 密码
<ignore_js_op>
刷新权限
<ignore_js_op>
客户端连接
<ignore_js_op>

Docker 容器部署 Mysql 数据库服务器

Docker 容器部署 Mysql 数据库服务器

本节会用到的 Docker 命令如下:

docker images  查看mysql镜像id 
docker run -d -p xxxxxxxxxxxxxxx/zhufc/mysql:v2   通过镜像生成 启动容器   4406映射端口  3306是mysql默认端口 
docker ps -a   查看生成的容器 
docker ps  
docker restart  容器id
docker stop     容器id  停止容器
docker rm       容器id  删除容器id
docker exec -it {mysql容器id} bash   进入指定容器
ps -ef | grep mysql 查看mysql服务 容器启动 mysql服务启动  绑定的

1、拉取 Mysql 镜像文件。

2、使用 docker images 查看下载的镜像文件

3、通过镜像生成容器

查看生成的容器:

4、停止容器,创建容器,查看容器

5、正在运行的容器无法删除,先停止掉,在删除容器

6、进入指定的容器  docker exec -it  要进入的容器 ID 

7、ps -ef | grep mysql 查看 mysql 服务,如果容器启动,则 mysql 服务启动 ,容器绑定 mysql 绑定

8、进入 Mysql 数据库修改配置文件

或者生效 profile 文件。

vim /etc/profile/
source /etc/profile    设置服务生效
mysql -u root -p000000 进入数据库

数据库的一些操作:

show databases; 查看库名
use mysql; 初始化数据库
drop api;  删除api数据库
create database api;设置api数据库

启动小幺鸡项目数据库:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| aiopms             |
| api                |
| mysql              |
| performance_schema |
| renren_security    |
| test               |
+--------------------+
7 rows in set (0.00 sec)

mysql> show tables;
+------------------+
| Tables_in_api    |
+------------------+
| attach           |
| doc              |
| doc_history      |
| email_token      |
| find_password    |
| interface        |
| interface_folder |
| module           |
| project          |
| project_global   |
| project_log      |
| project_user     |
| share            |
| sys              |
| team             |
| team_user        |
| user             |
| user_third       |
+------------------+
18 rows in set (0.00 sec)

mysql> 
mysql> 
mysql> 
mysql> 
mysql> 
mysql> 
mysql> 
mysql> 
mysql> 
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| aiopms             |
| api                |
| mysql              |
| performance_schema |
| renren_security    |
| test               |
+--------------------+
7 rows in set (0.02 sec)

mysql> use api;
Database changed
mysql> show tables;
+------------------+
| Tables_in_api    |
+------------------+
| attach           |
| doc              |
| doc_history      |
| email_token      |
| find_password    |
| interface        |
| interface_folder |
| module           |
| project          |
| project_global   |
| project_log      |
| project_user     |
| share            |
| sys              |
| team             |
| team_user        |
| user             |
| user_third       |
+------------------+
18 rows in set (0.00 sec)

mysql> source /usr/xiaoyaoji.sql
Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.03 sec)

Query OK, 0 rows affected (0.14 sec)

Query OK, 0 rows affected (0.04 sec)

Query OK, 0 rows affected (0.21 sec)

Query OK, 0 rows affected (0.03 sec)

Query OK, 0 rows affected (0.11 sec)

Query OK, 0 rows affected (0.04 sec)

Query OK, 0 rows affected (0.10 sec)

Query OK, 0 rows affected (0.04 sec)

Query OK, 0 rows affected (0.12 sec)

Query OK, 0 rows affected (0.03 sec)

Query OK, 0 rows affected (0.15 sec)

Query OK, 0 rows affected (0.03 sec)

Query OK, 0 rows affected (0.18 sec)

Query OK, 0 rows affected (0.04 sec)

Query OK, 0 rows affected (0.18 sec)

Query OK, 0 rows affected (0.05 sec)

Query OK, 0 rows affected (0.12 sec)

Query OK, 0 rows affected (0.03 sec)

Query OK, 0 rows affected (0.11 sec)

Query OK, 0 rows affected (0.05 sec)

Query OK, 0 rows affected (0.12 sec)

Query OK, 0 rows affected (0.02 sec)

Query OK, 0 rows affected (0.17 sec)

Query OK, 0 rows affected (0.03 sec)

Query OK, 0 rows affected (0.11 sec)

Query OK, 0 rows affected (0.03 sec)

Query OK, 0 rows affected (0.11 sec)

Query OK, 0 rows affected (0.04 sec)

Query OK, 0 rows affected (0.11 sec)

Query OK, 0 rows affected (0.06 sec)

Query OK, 0 rows affected (0.14 sec)

Query OK, 0 rows affected (0.10 sec)

Query OK, 0 rows affected (0.23 sec)

Query OK, 0 rows affected (0.04 sec)

Query OK, 0 rows affected (0.19 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

mysql>
mysql> 

使用 mysql 数据库,授权执行:

grant all on *.* to ''root''@''192.168.3.111'' identified by ''000000'';   --192.168.1.6为自己虚拟机ip
grant all on *.* to ''root''@''172.17.0.2'' identified by ''000000'';     -- ip 随机分配 默认不需要管
grant all privileges  on *.* to root@''%'' identified by "000000";  -- root
FLUSH PRIVILEGES;       # 刷新权限

退出到 ubuntu 界面:

下载 Navtice 数据库,输入 ip、账号、密码,测试连接。

 

在 mysql 数据库下面有个 user 表,删除该表下面的所有密码为空的用户。

到此,mysql 数据库的服务配置完成。

docker 微服务部署之:四、安装 docker、docker 中安装 mysql 和 jdk1.8、手动构建镜像、部署项目

docker 微服务部署之:四、安装 docker、docker 中安装 mysql 和 jdk1.8、手动构建镜像、部署项目

docker 微服务部署之:三,搭建 Zuul 微服务项目

1.Centos7 安装 Docker

  详见:Centos7 安装 Docker

2.Docker 中安装 jdk1.8

 详见:使用 Docker 构建 jdk1.8

3.Docker 中安装 mysql5.7

详见:docker 安装 mysql

在防火墙中开启 3306 端口,不然启动 article 项目连接 docker 中的 mysql 时,会报如下错误:

Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

查看端口是否开启,开启端口以及移除指定端口命令如下:

#查看是否开启指定端口
$ sudo firewall-cmd --query-port=3306/tcp
no
#添加指定需要开放的端口
$ sudo firewall-cmd --add-port=3306/tcp --permanent
success
#移除指定端口
#firewall-cmd --permanent --remove-port=3306/tcp #重新载入添加
/移除的端口 $ sudo firewall-cmd --reload #也可再查下是否开启指定端口 $ sudo firewall-cmd --query-port=3306/tcp yes

4. 部署 demo_eureka 项目

我的虚拟机的 ip 地址为:192.168.31.181

4.1 把 demo_eureka 项目打成 jar 包

4.1.1 打包前,修改项目配置

在打包之前,需要在 demo_eureka 项目中修改如下几个地方:

修改 pom.xml,新增如下内容:

<build>
        <finalName>app</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

修改 application.yml 中如下内容

#defaultZone: http://127.0.0.1:${server.port}/eureka
#192.168.31.181为虚拟机的IP地址 defaultZone: http://192.168.31.181:${server.port}/eureka

4.1.2 将 demo_eureka 项目打成 app.jar

将 demo_eureka 项目以及后面的 demo_article 项目、demo_zuul 项目都打成 app.jar,是因为方便利用 Dockerfile 部署时方便。

点击 idea 窗体左小角的 Terminal,然后将项目 demo_eureka 拖动到 Terminal 窗体里,接着输入 mvn clean package,如图:

刷新 target 目录,即可在该目录下看到 app.jar。

4.1.3 防火墙开启 7000 端口 (7000 端口为 demo_eureka 项目中自定义的 server.port 端口号)

如果没有开启 7000 端口,article 服务和 zuul 服务,会注册不到 eureka 上来。

#查看是否开启指定端口
$ sudo firewall-cmd --query-port=7000/tcp
no
#添加指定需要开放的端口
$ sudo firewall-cmd --add-port=7000/tcp --permanent
success
#移除指定端口
#firewall-cmd --permanent --remove-port=7000/tcp
#重新载入添加/移除的端口
$ sudo firewall-cmd --reload
#也可再查下是否开启指定端口
$ sudo firewall-cmd --query-port=7000/tcp
yes

 4.1.4 docker 构建 eureka 镜像,创建并运行 eureka 容器、查看 eureka 容器运行日志

a. 构建镜像前的准备工作:

# 创建用于存放app.jar和Dockerfile文件的目录,取名为mydocker
$ sudo mkdir /usr/local/mydocker
$ sudo cd /usr/local/mydocker
# 将app.jar上传到该目录(/usr/local/mydocker/
# 创建Dockerfile文件,文件名必须一模一样
$ sudo vi Dockerfile
# 基于jdk1.8镜像构建eureka镜像(因为eureka是打成了jar是通过java -jar来运行) FROM jdk1.
8
# 将当前目录的app.jar,复制到eureka镜像的/目录,名为app.jar ADD app.jar /app.jar
# 之所以用ENTRYPOINT命令,而不是CMD命令,是因为docker run会覆盖掉CMD命令里的内容。该行命令,就是执行java -jar /app.jar ENTRYPOINT [
"java","-jar","/app.jar"]

b. 构建 eureka 镜像

# eureka为构建后的镜像名称,下面最后的.和.前面的空格一定不能少。最后的.表示使用当前目录中的Dockerfile来构建。
$ sudo docker build -t eureka .
Sending build context to Docker daemon  46.05MB
Step 1/3 : FROM jdk1.8
 ---> 1f2578d93bd0
Step 2/3 : ADD app.jar /app.jar
 ---> 14d818fa91b0
Step 3/3 : ENTRYPOINT ["java","-jar","/app.jar"]
 ---> Running in d421e50bf8cd
Removing intermediate container d421e50bf8cd
 ---> 15c87bf6f8e5
Successfully built 15c87bf6f8e5
Successfully tagged eureka:latest
# 上面输出Successfully...表示构建eureka镜像成功,也可通过docker images命令查看是否构建成功
$
sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE eureka latest 15c87bf6f8e5 51 seconds ago 645MB
...
# 上面可以看到REPOSITORY下有一个名为eureka的镜像,即表示构建成功

c. 运行 eureka 容器

# docker run 表示创建一个新的容器并运行
# -d 表示以守护模式运行,也就是后台运行,非阻塞式运行
# --name=eureka 表示运行后的容器名称为eureka
# -p 7000:7000 表示将宿主机的7000端口和eureka容器的7000之间做个绑定
# 最后的eureka,是docker images中查看到的镜像名称
$ sudo docker run -d --name=eureka -p 7000:7000 eureka
0af7b3701b59048f9f9a901b29aff31b9956b2391c3d299f7e5f6016c8c44ffb
#出现如上一个很长的字符串,表示运行docker创建了一个eureka容器,并运行eureka容器成功,但至于eureka容器中的eureka服务是否能和我们预期的那么部署成功,还待下一步验证

d. 验证 eureka 服务

首先查看 eureka 容器是否在运行中

#查看运行中的容器(后面加 -a 可查看所有容器,不管该容器是否在运行中)
$ sudo docker ps
CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS                    NAMES
0af7b3701b59        eureka                    "java -jar /app.jar"     17 minutes ago      Up 17 minutes       0.0.0.0:7000->7000/tcp   eureka

可通过两种方式验证:

1. 通过浏览器访问 eureka 服务地址,是否能看到 eureka 界面

2. 通过查看运行日志

# docker logs 查看docker容器运行日志
# -f --tail=30 一直查看最后30行的日志
# eureka 容器的名称
$ sudo docker logs -f --tail=30 eureka

 5. 部署 demo_article 项目

5.1 把 demo_article 项目打成 jar 包

5.1.1 打包前,修改项目配置

在打包之前,需要修改 demo_article 项目中修改如下几个地方:

修改 pom.xml,新增如下内容:

   <build>
        <finalName>app</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

修改 application.yml 中相应部分内容为如下:

...
    url: jdbc:mysql://192.168.31.181:3306/docker?characterEncoding=UTF8
  ...
      defaultZone: http://192.168.31.181:7000/eureka
  ...

5.1.2 将 demo_article 项目打成 app.jar

点击 idea 窗体左小角的 Terminal,然后将项目 demo_article 拖动到 Terminal 窗体里,接着输入 mvn clean package,回车,刷新 target 目录,即可在该目录下看到 app.jar。

5.1.3 防火墙开启 9001 端口 (9001 端口为 demo_article 项目中自定义的 server.port 端口号)

如果没有开启 9001 端口,会出现 demo_article 项目在 article 容器中启动成功,但是无法访问 article 服务。

#查看是否开启指定端口
$ sudo firewall-cmd --query-port=9001/tcp
no
#添加指定需要开放的端口
$ sudo firewall-cmd --add-port=9001/tcp --permanent
success
#移除指定端口
#firewall-cmd --permanent --remove-port=9001/tcp
#重新载入添加/移除的端口
$ sudo firewall-cmd --reload
#也可再查下是否开启指定端口
$ sudo firewall-cmd --query-port=9001/tcp
yes

5.1.4 docker 构建 article 镜像、创建和运行 article 容器、查看 article 容器运行日志

a. 构建镜像前的准备工作

$ sudo cd /usr/local/mydocker
# 将app.jar上传到该目录(/usr/local/mydocker/
$ sudo ls
app.jar Dockerfile

因为在构建 eureka 镜像时,已经创建了一个用于存放 jar 包和 Dockerfile 的目录叫 mydocker,所以不用再创建。

另外,由于不管是哪个项目,都打包成了名为 app.jar,所以 Dockerfile 文件也可以复用。

故只需要把 demo_article 打成的 jar 包,上传到 /usr/local/mydocker 目录下,覆盖掉原先的 app.jar 即可。

b. 构建 article 镜像

# article为构建后的镜像名称,下面最后的.和.前面的空格一定不能少。最后的.表示使用当前目录中的Dockerfile来构建。
$ sudo docker build -t article .
Sending build context to Docker daemon  46.05MB
Step 1/3 : FROM jdk1.8
 ---> 1f2578d93bd0
Step 2/3 : ADD app.jar /app.jar
 ---> 9633e0cb462b
Step 3/3 : ENTRYPOINT ["java","-jar","/app.jar"]
 ---> Running in a51dd9b611e6
Removing intermediate container a51dd9b611e6
 ---> 7f5954f085f6
Successfully built 7f5954f085f6
Successfully tagged eureka:latest
# 上面输出Successfully...表示构建article镜像成功,也可通过docker images命令查看是否构建成功
$ sudo docker images
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
article                    latest              7f5954f085f6        2 minutes ago      651MB
...
# 上面可以看到REPOSITORY下有一个名为article的镜像,即表示构建成功

c. 运行 article 容器

# docker run 表示创建一个新的容器并运行
# -d 表示以守护模式运行,也就是后台运行,非阻塞式运行
# --name=article 表示运行后的容器名称为article
# -p 9001:9001 表示将宿主机的9001端口和eureka容器的9001之间做个绑定
# 最后的eureka,是docker images中查看到的镜像名称
$ sudo docker run -d --name=article -p 9001:9001 article
7031e9a5bd25d2708e18b8b986ae3081c09bb29caa4948fd437e7b5a9b47c602
#出现如上一个很长的字符串,表示运行docker创建了一个article容器,并运行article容器成功,但至于article容器中的article服务是否能和我们预期的那么部署成功,还待下一步验证

d. 验证 article 服务

首先查看 article 容器是否在运行中

#查看运行中的容器(后面加 -a 可查看所有容器,不管该容器是否在运行中)
$ sudo docker ps
CONTAINER ID        IMAGE                     COMMAND                  CREATED              STATUS              PORTS                    NAMES
7031e9a5bd25        article                   "java -jar /app.jar"     About a minute ago   Up About a minute   0.0.0.0:9001->9001/tcp   article

可通过三种方式验证:

1. 通过浏览器访问 eureka 服务地址,查看 demo_article 服务是否注册到 eureka 上

2. 通过查看运行日志

# docker logs 查看docker容器运行日志
# -f --tail=30 一直查看最后30行的日志
# article 容器的名称
$ sudo docker logs -f --tail=30 article

3. 通过访问 demo_article 项目的 url

6. 部署 demo_zuul 项目

6.1 把 demo_zuul 项目打成 jar 包

6.1.1 打包前,修改项目配置

在打包之前,需要修改 demo_zuul 项目中修改如下几个地方:

修改 pom.xml,新增如下内容:

<build>
        <finalName>app</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

修改 application.yml 中相应部分内容为如下:

...
    defaultZone: http://192.168.31.181:7000/eureka
...

6.1.2 将 demo_zuul 项目打成 app.jar

点击 idea 窗体左小角的 Terminal,然后将项目 demo_zuul 拖动到 Terminal 窗体里,接着输入 mvn clean package,回车,刷新 target 目录,即可在该目录下看到 app.jar。

6.13 防火墙开启 8888 端口(8888 端口为 demo_zuul 项目中自定义的 server.port 端口号)

如果没有开启 8888 端口,会出现通过网关代理去访问 article 服务时,出现访问错误情况。

#查看是否开启指定端口
$ sudo firewall-cmd --query-port=8888/tcp
no
#添加指定需要开放的端口
$ sudo firewall-cmd --add-port=8888/tcp --permanent
success
#移除指定端口
#firewall-cmd --permanent --remove-port=8888/tcp
#重新载入添加/移除的端口
$ sudo firewall-cmd --reload
#也可再查下是否开启指定端口
$ sudo firewall-cmd --query-port=8888/tcp
yes

6.1.4 docker 构建 zuul 镜像、创建和运行 zuul 容器、查看 zuul 容器运行日志

a. 构建镜像前的准备工作

$ sudo cd /usr/local/mydocker
# 将app.jar上传到该目录(/usr/local/mydocker/
$ sudo ls
app.jar Dockerfile

因为在构建 eureka 镜像时,已经创建了一个用于存放 jar 包和 Dockerfile 的目录叫 mydocker,所以不用再创建。

另外,由于不管是哪个项目,都打包成了名为 app.jar,所以 Dockerfile 文件也可以复用。

故只需要把 demo_article 打成的 jar 包,上传到 /usr/local/mydocker 目录下,覆盖掉原先的 app.jar 即可。

b. 构建 zuul 镜像

# zuul为构建后的镜像名称,下面最后的.和.前面的空格一定不能少。最后的.表示使用当前目录中的Dockerfile来构建。
$ sudo docker build -t zuul .
Sending build context to Docker daemon  46.05MB
Step 1/3 : FROM jdk1.8
 ---> 1f2578d93bd0
Step 2/3 : ADD app.jar /app.jar
 ---> 9496a939de7f
Step 3/3 : ENTRYPOINT ["java","-jar","/app.jar"]
 ---> Running in e682a3f423e5
Removing intermediate container e682a3f423e5
 ---> 62c091b00c8f
Successfully built 62c091b00c8f
Successfully tagged eureka:latest
# 上面输出Successfully...表示构建article镜像成功,也可通过docker images命令查看是否构建成功
$ sudo docker images
REPOSITORY                TAG                 IMAGE ID            CREATED              SIZE
zuul                      latest              62c091b00c8f        About a minute ago   642MB
...
# 上面可以看到REPOSITORY下有一个名为zuul的镜像,即表示构建成功

c. 运行 zuul 容器

# docker run 表示创建一个新的容器并运行
# -d 表示以守护模式运行,也就是后台运行,非阻塞式运行
# --name=zuul 表示运行后的容器名称为zuul
# -p 8888:8888 表示将宿主机的9001端口和zuul容器的8888之间做个绑定
# 最后的zuul,是docker images中查看到的镜像名称
$ sudo docker run -d --name=zuul -p 8888:8888 zuul
94a28b1a9fdd2456aab3cbae3685e3fe77cd1754e2107a6f3bcc0b3d788051d1
#出现如上一个很长的字符串,表示运行docker创建了一个zuul容器,并运行zuul容器成功,但至于zuul容器中的zuul服务是否能和我们预期的那么部署成功,还待下一步验证

d. 验证 zuul 服务

首先查看 zuul 容器是否在运行中

#查看运行中的容器 (后面加 -a 可查看所有容器,不管该容器是否在运行中)

$ sudo # docker ps
CONTAINER ID        IMAGE                     COMMAND                  CREATED              STATUS              PORTS                    NAMES
94a28b1a9fdd        zuul                      "java -jar /app.jar"     About a minute ago   Up About a minute   0.0.0.0:8888->8888/tcp   zuul

可通过三种方式验证:

1. 通过浏览器访问 eureka 服务地址,查看 demo_zuul 服务是否注册到 eureka 上

 

2. 通过查看运行日志

# docker logs 查看docker容器运行日志
# -f --tail=30 一直查看最后30行的日志
# zuul容器的名称
$ sudo docker logs -f --tail=30 zuul

3. 通过 zuul 网关代理访问 demo_article 项目的 url

docker 微服务部署之:五、利用 DockerMaven 插件自动构建镜像

关于利用 SSH 桥接访问服务器的 Docker 运行的 MySql 服务ssh连接docker容器的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于docker 创建 mysql 服务、Docker 安装 MySQL 服务、Docker 容器部署 Mysql 数据库服务器、docker 微服务部署之:四、安装 docker、docker 中安装 mysql 和 jdk1.8、手动构建镜像、部署项目的相关信息,请在本站寻找。

本文标签: