【Docker应用部署】学习笔记

0. Docker如何部署应用

我们知道,容器和外部机器的网络不是互通的,不能直接通信。但是

  • 外部机器和宿主机可以直接通信
  • 宿主机和容器可以直接通信

因此,当容器中的网络服务需要被外部机器访问时,可以将容器中提供服务的端口映射到宿主机的端口上。外部机器访问宿主机的端口,从而间接访问容器的服务。如下图所示,这种操作称为:端口映射
在端口映射图解
下面,我们就通过端口映射来部署一些经典的应用。

1. MySQL部署

1.1 代码展示

# 1.搜索mysql镜像
[root@centos00 ~]# docker search mysql
# 2.拉取mysql镜像
[root@centos00 ~]# docker pull mysql:5.6
# 3.在/myself目录下创建mysql目录用于存储mysql数据信息(可自定义)
[root@centos00 ~]# mkdir -p /myself/mysql
[root@centos00 ~]# cd /myself/mysql
# 4.创建容器,设置端口映射、目录映射(记得一定要在刚才创建的mysql目录下)
[root@centos00 mysql]# docker run -id \
> -p 3307:3306 \ 					# 将容器的 3306 端口映射到宿主机的 3307 端口。
> --name=c_mysql \                  # 指定容器的名字(可自定义)。
> -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 用户的密码。
> mysql:5.6 
# 5.进入容器,操作mysql
[root@centos00 mysql]# docker exec -it c_mysql /bin/bash
[root@centos00 mysql]# mysql -uroot -p123456
[root@centos00 mysql]#show databases;
[root@centos00 mysql]#create database db1; # 创建新数据库,在里面修改数据,测试运行效果

1.2 效果截图

  • 进入mysql并创建新数据库

请添加图片描述

  • 使用外部机连接数据库(记得使用指定的端口3307喔)
    请添加图片描述
  • 在数据库db1中建表并填充数据
    请添加图片描述
    请添加图片描述
  • 回到容器中查看数据库是否已更改(成功)(ps:我的createCRT过期了,换成XShell来操作)
    请添加图片描述

1.3 过程中出现的问题:外部机无法连接,显示10060错误!!!

请添加图片描述
这个问题应该是虚拟机的配置问题,我换了个虚拟机(上面的192.168.242.5)就好了

3. Tomcat部署

3.1 代码展示

# 1.搜索tomcat镜像
[root@localhost ~]# docker search tomcat
# 2.拉取tomcat镜像
[root@localhost ~]# docker pull tomcat
# 3.在/root目录下创建tomcat目录用于存储tomcat数据信息
[root@localhost ~]# mkdir ~/tomcat
[root@localhost ~]# cd ~/tomcat
# 4.创建容器,设置端口映射、目录映射
[root@localhost tomcat]# docker run -id --name=c_tomcat \
> -p 8080:8080 \						# 将容器的8080端口映射到主机的8080端口
> -v $PWD:/usr/local/tomcat/webapps \	# 将主机中当前目录挂载到容器的webapps
> tomcat

3.2 效果截图

  • 创建并运行tomcat容器(-id表示守护模式启动)
    请添加图片描述
  • 使用外部机器访问tomcat
    请添加图片描述
    注意,访问tomcat出现404表示服务已经运行成功,服务运行失败会出现下面的内容而不会出现404错误请添加图片描述
    之所以出现404是因为我们没有部署应用,服务器自然访问不到,所以我们还需要部署具体的应用才能访问
  • 模拟部署应用
# 在 /root/tomcat/test 路径下创建 index.html 文件并写入内容
echo '<h1>Hello Docker Tomcat ~</h1>' > index.html

请添加图片描述

  • 再次使用外部机器访问tomcat(访问路径是我们刚才定义的/root/tomcat/test)
    请添加图片描述
    应用部署成功!

4. Nginx部署

nginx 部署和mysql、tomcat相似,都是先拉取镜像,再通过 docker run 指令启动容器。

4.1 代码展示

# 1.搜索nginx镜像
[root@localhost ~]# docker search nginx
# 2.拉取tomcat镜像
[root@localhost ~]# docker pull nginx
# 3.在/root目录下创建nginx目录用于存储nginx数据信息
[root@localhost ~]# mkdir ~/nginx
[root@localhost ~]# cd ~/nginx
[root@localhost nginx]# mkdir conf
[root@localhost nginx]# cd conf
# 4.在~/nginx/conf/下创建nginx.conf文件,并粘贴下面内容
[root@localhost conf]# vim nginx.conf
# 直接复制整个文档即可
user nginx;
worker_processes 1;

error_log  /var/log/nginx/error.log warn;
pid		   /var/run/nginx.pid;


events {
	worker_connections 1024;
} 


http {
	include		  /etc/nginx/mime.types;
	default_type  application/octet-stream;
	
	log_format	main  '$remote_addr - $remote_user [$time_local] "$request" '
	                  '$status $body_bytes_sent "$http_referer" '
	                  '"$http_user_agent" "$http_x_forwarded_for"';
	                  
	access_log  /var/log/nginx/access.log main;
	
	sendfile        on;
	#tcp_nopush     on;
	
	keepalive_timeout  65;
	#gzip  on;
	
	include /etc/nginx/conf.d/*.conf;
}
# 复制完之后wq保存退出即可
# 5.退回nginx目录,也可以直接写cd ~/nginx/
[root@localhost conf]# cd ../
# 4.创建容器,设置端口映射、目录映射
[root@localhost tomcat]# docker run -id --name=c_nginx \
-p 80:80 \										# 将容器的 80端口映射到宿主机的 80 端口。
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \ # 将主机当前目录下的 /conf/nginx.conf 挂载到容器的 :/etc/nginx/nginx.conf 配置目录。
-v $PWD/logs:/var/log/nginx \					# 将主机当前目录下的 logs 目录挂载到容器的 /var/log/nginx 日志目录。
-v $PWD/html:/usr/share/nginx/html \
nginx
  • 注意:与mysql、tomcat挂载目录时相比,nginx不光挂载了日志目录 logs 、部署文件目录 html ,还挂载了nginx默认的配置文件目录,这是因为:
  • nginx是用来实现反向代理、负载均衡的,经常需要改动配置文件,因此我们把nginx的配置文件一并挂载到宿主机,这样就可以方便修改

4.2 效果截图

  • 编写配置文件
    请添加图片描述
  • 创建并运行容器
    请添加图片描述
  • 使用外部机器访问nginx

请添加图片描述
注意,访问nginx出现 “nginx/版本号” 表示服务已经运行成功,之所以出现403是因为我们没有部署应用(类似于tomcat的404),服务器自然访问不到,所以我们还需要部署具体的应用才能访问

  • 模拟部署应用
# 在 /root/nginx/html 路径下创建 index.html 文件并写入内容
echo '<h1>Hello Docker Tomcat ~</h1>' > index.html
# 除了 echo 也可以使用 vim index.html 指令来写入

请添加图片描述

  • 再次使用外部机器访问nginx(刷新页面)
    请添加图片描述
    应用部署成功!

5. Redis部署

5.1 代码展示

# 1.搜索redis镜像
[root@localhost ~]# docker search redis
# 2.拉取tomcat镜像,指定5.0版本
[root@localhost ~]# docker pull redis:5.0
# 3.创建容器,设置端口映射
[root@localhost ~]# docker run -id --name=c_redis -p 6379:6379 redis:5.0
# 4.使用外部机器连接redis
[root@localhost ~]# ./redis-cli.exe -h 192.168.220.12 -p 6379
keys *
set name lxs
get name

5.2 效果截图

  • 创建并运行容器
    请添加图片描述

  • 准备外部机器运行环境(这里我用的是window下的redis)
    请添加图片描述

  • 使用外部机器连接redis(可以成功进入并使用redis,这里我存了一个数据:name -> cjw)
    请添加图片描述

  • 回到宿主机查看(可以看到数据已经保存到redis数据库中)
    请添加图片描述
    部署成功!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值