Docker
1. Linux安装Docker
Centos系统Docker安装官方文档:
- https://docs.docker.com/engine/install/centos/
- 此安装过程安装的是最新版的Docker
1.1 什么是Docker

1.2 安装Docker
1.2.1 卸载之前的Docker
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
1.2.2 设置仓库
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
1.2.3 安装Docker及相关引擎
sudo yum install docker-ce docker-ce-cli containerd.io
1.2.4 启动Docker
sudo systemctl start docker
sudo docker-v #查看docker版本
sudo docker images #使用超级管理员权限查看docker安装了哪些镜像
1.2.5 设置docker开机自启动
sudo systemctl enable docker
1.3 配置docker镜像加速
-
阿里云镜像服务地址:https://cr.console.aliyun.com/cn-hangzhou/instances
-
分别执行下方4条指令
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://kl34k9x6.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
2. Docker安装Mysql
2.1 安装Mysql
2.1.1 卸载mysql
- 通过两种方式安装mysql的卸载方法
//rpm包安装方式卸载
查包名:rpm -qa|grep -i mysql
删除命令:rpm -e –nodeps 包名
//yum安装方式下载
1.查看已安装的mysql
命令:rpm -qa | grep -i mysql
2.卸载mysql
命令:yum remove mysql-community-server-5.6.36-2.el7.x86_64
查看mysql的其它依赖:rpm -qa | grep -i mysql
//卸载依赖
yum remove mysql-libs
yum remove mysql-server
yum remove perl-DBD-MySQL
yum remove mysql
2.1.2 下载镜像文件
- 指定mysql版本为5.7
sudo docker pull mysql:5.7
2.2通过端口和文件映射创建一个容器并启动
- 将docker容器中的mysql和linux系统的mysql端口,日志,数据,配置文件进行映射。
这样,如果修改linux的mysql配置文件,docker容器内部的配置文件也会修改
docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
参数说明
- 挂载类似于快捷方式,将容器内(docker)文件挂载到容器外(linux)
- 以后修改配置文件或者查看日志,直接在容器外即可查看
- 修改外部文件,容器内部文件同步修改
-p 3306:3306 #将容器的 3306端口映射到主机的3306端口
--name mysql #给当前容器命名为mysql
-v /mydata/mysql/conf:/etc/mysql #将配置文件夹挂载到主机
-v /mydata/mysql/log:/var/log/mysql #将日志文件夹挂载到主机
-v /mydata/mysql/data:/var/lib/mysql/ #将配置文件夹挂载到主机
-e MYSQL_ROOT_PASSWORD=root #初始化 root用户的密码
-d mysql:5.7 #以后台方式运行该镜像
Linux内部

Docker容器内部

2.2.1 查看正在运行的容器
docker ps #查看正在运行的容器
docker rm fb087642b497 (该containerID) #根据容器id删除容器

2.2.2 进入容器内部
- 每个容器都相当于一个小型的linux系统
docker exec -it mysql /bin/bash #进入该容器bash控制台
查看该容器文件目录

查看容器安装路径
whereis mysql

退出容器内部
exit
2.2.3 修改容器内部mysql配置
vi my.conf
按i进入插入模式
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect=SET collation_connection = utf8_unicode_ci
init_connect=SET NAMES utf8
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
先按esc 然后输入:wq 退出
修改后重启mysql容器
docker restart mysql
查看容器内部配置文件是否同步更新

修改文件名
mv my.conf my.cnf
重启容器
- 如果mysql容器关闭,想要再次使用。
- 如果再次创建的话,会提示容器已存在。所以重启容器即可。
# mysql 容器名
docker restart mysql
3. Docker安装Redis
3.1 下载镜像文件
sudo docker pull redis
查看镜像

3.2通过端口和文件映射创建一个容器并启动
- 首先创建一个文件夹conf和文件redis.conf
mkdir -p /mydata/redis/conf
touch /mydata/redis/conf/redis.conf
出错解决方案
netstat -anp |grep 6379 #查看进程id
kill -9 进程id
docker rm 容器id #关闭该容器
- 将docker容器中的redis和linux系统的redis端口,日志,数据,配置文件进行映射。
这样,如果修改linux的redis配置文件,docker容器内部的配置文件也会修改
docker run -p 6379:6379 --name redis \
-v /mydata/redis/data:/data \
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf

3.2.1启动redis客户端
docker exec -it redis redis-cli
测试存入数据

注意点
- 新版本的redis默认持久化
- 重启redis容器,再次获取值还是能获取的

3.2.2 给redis设置密码
如果开放6379端口,不对其设置密码的话,容易被入侵。
- 修改redis.conf文件,在其加入
requirepass 123 指定密码123
设置Docker重启后自动启动的容器
docker update --restart=always 容器名或容器ID

4. docker安装nginx
4.1 下载镜像
# 下载最新的镜像
docker pull nginx
# 下载指定版本的镜像
docker pull nginx:xxx
4.2 创建外部挂载目录
# 创建挂载目录
mkdir -p /mydata/nginx/conf
mkdir -p /mydata/nginx/log
mkdir -p /mydata/nginx/html
先生成一个容器,把容器中的nginx.conf文件和conf.d文件夹复制到宿主机
# 生成容器,将外部的9001端口和容器内部80端口进行映射 --name表示容器名 -d 表示镜像源
docker run --name nginx -p 9001:80 -d nginx
# 将容器nginx.conf文件复制到宿主机
docker cp nginx:/etc/nginx/nginx.conf /mydata/nginx/conf/nginx.conf
# 将容器conf.d文件夹下内容复制到宿主机
docker cp nginx:/etc/nginx/conf.d /mydata/nginx/conf/conf.d
# 将容器中的html文件夹复制到宿主机
docker cp nginx:/usr/share/nginx/html /mydata/nginx/
删除刚才生成的容器(本地映射文件不会删除)
# 直接执行docker rm nginx或者以容器id方式关闭容器
# 找到nginx对应的容器id
docker ps
# 关闭该容器
docker stop nginx
# 删除该容器
docker rm nginx
# 删除正在运行的nginx容器
docker rm -f nginx
重新进行映射,并生成容器
docker run \
-p 9001:80 \
--name nginx \
-v /mydata/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /mydata/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /mydata/nginx/log:/var/log/nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-d nginx:1.22.0
同一个镜像源可以生成多个容器(容器名不同),也就是说一个服务器上可以安装多个nginx。
docker run \
-p 9002:80 \
--name kfnginx \
-v /mydata/kfnginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /mydata/kfnginx/conf/conf.d:/etc/nginx/conf.d \
-v /mydata/kfnginx/log:/var/log/nginx \
-v /mydata/kfnginx/html:/usr/share/nginx/html \
-d nginx:1.22.0
配置若依前后端分离项目时,需要添加路由跳转
rewrite ^.*$ /index.html last;
}
location /prod-api/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://172.16.0.5:8080/;
}
完整配置
server {
listen 80;
listen [::]:80;
server_name localhost;
index index.html index.htm;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
try_files $uri $uri/ @router;
index index.html index.htm;
}
location @router{
rewrite ^.*$ /index.html last;
}
location /prod-api/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://172.16.0.5:8085/;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}

浙公网安备 33010602011771号