一、应用部署步骤
- 搜索应用镜像
- 拉取应用镜像
- 根据镜像创建容器
- 操作容器中的应用
二、应用部署相互关系
- 容器内的网络服务和外部机器不能直接通信
- 外部机器和宿主机可以直接通信
- 宿主机和容器可以直接通信
- 当容器中的网络服务需要被外部机器访问时,可以将容器中提供的端口映射到宿主机的端口上。外部机器可以访问宿主机的该端口,从而间接访问容器的服务——端口映射
三、部署示例——MySQL
- 搜索mysql镜像
docker search mysql
- 拉去mysql镜像
docker pull mysql:5.7
- 创建容器,设置端口映射,目录映射
# 1、创建mysql目录用于存储数据信息(根据自己的目录创建) mkdir MySQL cd MySQL # 2、创建容器,设置端口映射、目录映射 docker run -id \ -p 3307:3306 \ --name=my_mysql \ -v $PWD/conf:/etc/mysql \ -v $PWD/data:/home/mysql/data \ -v $PWD/logs:/home/mysql/logs \ -e MYSQL_ROOT_PASSWORD=123456 \ mysql:5.7 # ----------------------参数详解----------------------- # -p 3307:3306 将容器的3306端口映射到宿主机3307端口 # -v 将宿主机的目录挂载到容器目录 # -e MYSQL_ROOT_PASSWORD 初始化MySQL root用户的密码 # $PWD 宿主机当前目录 # \ 换行符
- 进入mysql容器
#进入容器 docker exec -it my_mysql bash
四、部署示例——Tomcat
- 搜索Tomcat镜像
docker search tomcat
- 拉去tomcat镜像
docker pull Tomcat:8.5
- 创建容器,设置端口映射,目录映射
# 1、创建tomcat目录用于存储数据信息(根据自己的目录创建) mkdir Tomcat cd Tomcat # 2、创建容器,设置端口映射、目录映射 docker run -id \ -p 8080:8080 \ --name=my_tomcat \ -v $PWD/webapps:/home/Tomcat/webapps \ tomcat:8.5 # ----------------------参数详解----------------------- # -p 8080:8080将容器的8080端口映射到宿主机8080端口 # -v 将宿主机的目录挂载到容器目录 # $PWD 宿主机当前目录 # \ 换行符
- 进入mysql容器
#进入容器 docker exec -it my_tomcat bash
五、部署示例——Nginx
-
搜索Nginx镜像
docker search nginx
-
拉去Nginx镜像
docker pull nginx:1.20
-
创建映射目录和文件
# 1、创建Nginx目录用于存储数据信息(根据自己的目录创建) mkdir Nginx cd Nginx mkdir conf cd ../
创建Nginx配置文件并放入conf目录下
#user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include 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 logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; server { listen 443 ssl; #SSL协议访问端口号为443。此处如未添加ssl,可能会造成Nginx无法启动。 server_name www.xxx.cn; #将localhost修改为您证书绑定的域名,例如:www.xxx.com。 root html; index index.html index.htm; ssl_certificate cert/6706298_www.xxx.cn.pem; #将www.xxx.com.pem替换成您证书的文件名。 ssl_certificate_key cert/6706298_www.xxx.cn.key; #将www.xxx.com.key替换成您证书的密钥文件名。 ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #使用此加密套件。 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #使用该协议进行配置。 ssl_prefer_server_ciphers on; location / { root /home/Project/Web/; index index.html index.htm; } } server { listen 80; server_name www.xxx.cn; #将localhost修改为您证书绑定的域名,例如:www.xxx.com。 rewrite ^(.*)$ https://$host$1 permanent; #将所有http请求通过rewrite重定向到https。 location / { root /home/Project/Web/ ; index index.html index.htm; } } }
-
创建容器,设置端口映射,目录映射
# 创建容器,设置端口映射、目录映射 docker run -id \ -p 80:80 \ --name=my_nginx \ -v $PWD/conf/nginx.conf:/home/nginx/conf/nginx.conf \ -v $PWD/logs:/home/nginx/logs \ -v $PWD/project:/home/nginx/project \ nginx:1.20 # ----------------------参数详解----------------------- # -p 8080:8080将容器的8080端口映射到宿主机8080端口 # -v 将宿主机的目录挂载到容器目录 # $PWD 宿主机当前目录 # \ 换行符
-
进入mysql容器
#进入容器 docker exec -it my_nginx bash
六、部署示例——Redis
-
搜索Tomcat镜像
docker search redis
-
拉去tomcat镜像
docker pull redis:4.0.6
-
官网下载配置文件并修改redis.conf
bind 127.0.0.1 #注释掉这部分,这是限制redis只能本地访问 protected-mode no #默认yes,开启保护模式,限制为本地访问 daemonize no#默认no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程,改为yes会使配置文件方式启动redis失败 appendonly yes #redis持久化(可选) set-proc-title no # 修改为yes,默认no logfile "redis.log"
-
创建容器,设置端口映射
# 创建容器,设置端口映射 docker run -id -p 6379:6379 --name=redis -v /home/Docker/Redis/conf/redis.conf:/home/Docker/Redis/conf/redis.conf -v /home/Docker/Redis/data:/data:rw redis:4.0.6 redis-server /home/Docker/Redis/conf/redis.conf --appendonly yes # ----------------------参数详解----------------------- # -p 8080:8080将容器的8080端口映射到宿主机8080端口 # \ 换行符
-
容器常用命令
# 查看活跃的容器 docker ps # 如果没有 redis 说明启动失败 查看错误日志 docker logs redis # 查看 redis 的 ip 挂载 端口映射等信息 docker inspect redis # 查看 redis 的端口映射 docker port redis
-
使用rdb持久化文件恢复数据
#进入容器使用redis-cli命令连接redis redis-cli #通过config get dir 命令获取目录 config get dir #然后通过挂在的目录文件将dump.rdb放入改目录(先暂停redis服务再放入文件) #最后启动 docker start redis
常见问题
1、修改宿主机的hostname导致docker 中镜像服务连接不上
需要修改docker配置中引用的hostname