Docker

1. Linux安装Docker

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镜像加速

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;
    #}
}
posted @ 2021-11-04 16:36  初夏那片海  阅读(56)  评论(0)    收藏  举报