一、Docker安装

1.1 更新yum
yum update
1.2 安装依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
1.3 添加yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
1.4 安装containerd.io
dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm
1.5 安装docker-ce
yum install docker-ce
1.6 启动Docker服务
systemctl start docker
1.7 配置阿里云镜像
  1. 登录阿里云
  2. 进入控制台
  3. 进入容器镜像服务
  4. 选择镜像加速器
  5. 复制并执行命令

二、进程命令

2.1 启动Docker服务
systemctl start docker
2.2 停止Docker服务
systemctl stop docker
2.3 重启Docker服务
systemctl restart docker
2.4 查看Docker服务状态
systemctl status docker
2.5 设置开机启动docker服务
systemctl enable docker

三、镜像命令

3.1 查看本地所有镜像
docker images
3.2 在线查找镜像
docker search 镜像名称
3.3 拉取镜像
docker pull 镜像名称:版本号
3.4 删除本地镜像
docker rmi 镜像id

四、容器命令

4.1 查看所有容器
docker ps –a
4.2 创建并启动容器
docker run 参数

参数说明:
-i:保持容器运行。通常与 -t 同时使用。加入it这两个参数后,容器创建后自动进入容器中,退出容器后,容器自动关闭。
-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用。
-d:以守护(后台)模式运行容器。创建一个容器在后台运行,需要使用docker exec 进入容器。退出后,容器不会关闭。
-it:创建的容器一般称为交互式容器,-id 创建的容器一般称为守护式容器
–name:为创建的容器命名。
示例:

docker run -it --name=容器名字 镜像名称:镜像版本 /bin/bash
4.3 进入容器
docker exec -it 容器名 /bin/bash
4.4 停止容器
docker stop 容器名称
4.4 启动容器
docker start 容器名称
4.5 删除容器
docker rm 容器名称
4.6 查看容器信息
docker inspect 容器名称
4.7 查看容器运行日志
docker logs -f 容器id

五、数据卷命令

5.1 配置数据卷
docker run -it --name=容器名称 -v /root/data:/root/data_container 镜像名称:镜像版本 /bin/bash

注意事项:

  1. 目录必须是绝对路径
  2. 如果目录不存在,会自动创建
  3. 可以挂载多个数据卷
5.1 配置数据卷容器
  1. 创建启动c3数据卷容器,使用 –v 参数 设置数据卷
docker run –it --name=c3 –v /volume centos:7 /bin/bash
  1. 创建启动 c1 c2 容器,使用 --volumes-from 参数 设置数据卷
docker run –it --name=c1 --volumes-from c3 centos:7 /bin/bash
docker run –it --name=c2 --volumes-from c3 centos:7 /bin/bash

六、应用部署

6.1 部署Mysql

6.1.1 拉取镜像
docker pull mysql:版本号
6.1.2 在/root目录下创建mysql目录用于存储mysql数据信息
mkdir ~/mysql
cd ~/mysql
6.1.3 创建容器,设置端口映射、目录映射
docker run -id \
-p 宿主机端口:容器端口 \
--name=容器名称 \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=数据库密码 \
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 。数据目录

6.2 部署Tomcat

6.2.1 拉取镜像
docker pull tomcat:版本号
6.2.2 在/root目录下创建tomcat目录用于存储tomcat数据信息
mkdir ~/tomcat
cd ~/tomcat
6.2.3 创建容器,设置端口映射、目录映射
docker run -id --name=容器名称 -p 宿主机端口:8080 -v $PWD:/usr/local/tomcat/webapps tomcat:版本号
  • 参数说明:
    • -v $PWD:/usr/local/tomcat/webapps:将主机中当前目录挂载到容器的webapps

6.3 部署Nginx

6.3.1 拉取镜像
docker pull nginx:版本号
6.3.2 在/root目录下创建nginx目录用于存储nginx数据信息
mkdir ~/nginx
cd ~/nginx
6.3.3 在~/nginx/conf/下创建nginx.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;
}
6.3.4 创建容器,设置端口映射、目录映射
docker run -id --name=容器名称 -p 宿主机端口:容器端口 -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf -v $PWD/logs:/var/log/nginx -v $PWD/html:/usr/share/nginx/html nginx:版本号
  • 参数说明:
    • -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。日志目录
6.3.5 Nginx配置反向代理
1.创建配置目录
mkdir -p nginx/{conf,conf.d,html,logs}
2.进入conf目录下创建 nginx.conf
cd nginx/conf/
vi 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;
}
2.进入conf.d目录下创建 default.conf
cd nginx/conf.d/
vi default.conf

进行自定义配置

server {
    listen       80; # 监听端口号
    server_name  localhost; # 宿主机ip

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://192.168.116.130:8080; # 反向代理ip:端口号
        index  index.html index.htm;
    }

    #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;
    #}
}

# 配置第二个代理
server {
    listen       81;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://192.168.116.130:8081;
        index  index.html index.htm;
    }
}
3.创建容器,设置端口映射、目录映射
docker run -d -p 80:80 --name nginx -v /root/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /root/docker/nginx/conf.d:/etc/nginx/conf.d -v /root/docker/nginx/logs:/var/log/nginx nginx:latest
6.3.6 Nginx配置负载均衡
1.进入conf目录配置 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;
    
	# 开始
    upstream myserver {
        server 192.168.116.130:8080; # 地址1
        server 192.168.116.130:8081; # 地址2
    }

    server{
        listen 80;
        server_name localhost;
        location / {
                proxy_pass         http://myserver;
                root html;
                index index.html index.htm;
        }
    }
	# 结束
}
2.重启Nginx容器
6.3.7 Nginx配置动静分离

Nginx配置动静分离

6.3.8 Nginx配置高可用

6.3 部署Redis

6.3.1 拉取镜像
docker pull redis:版本号
6.3.2 在/root目录下创建redis目录用于存储redis数据信息
mkdir ~/redis
cd ~/redis
6.3.3 创建容器,设置端口映射
docker run -id --name=容器名称 -p 宿主机端口:容器端口 redis:版本号
6.3.4 根据配置文件启动redis

创建宿主机 redis 容器的数据和配置文件目录

mkdir redis/{conf,data} -p

进入conf目录下创建 redis.conf 并编写自定义配置

cd redis/conf
vi redis.conf

创建并运行一个名为 redis 的容器

docker run -p 6379:6379 --name redis -v $PWD/conf/redis.conf:/etc/redis/redis.conf:ro -v $PWD/data:/data:rw -d redis:5.0 redis-server /etc/redis/redis.conf --appendonly yes
  • 参数说明:
    • -v $PWD/conf/redis.conf:/etc/redis/redis.conf:ro:挂载配置文件,/conf/redis.conf是自己配置文件的地址,/usr/local/etc/redis/redis.conf是容器中的配置文件地址,容器启动成功后会自己创建,之后可以通过更改宿主机的配置文件来达到更改容器实际配置文件的目的。“:ro”这个是给容器中/redis.conf添加只读权限。
    • -v $PWD/data:/data:rw:挂载持久化文件,左/data是宿主机中持久化文件的位置,右/data是容器中持久化文件的位置(需要和配置文件中dir属性值一样),“:rw”这个是给容器中/data目录添加读写权限。
    • -d:后台启动
    • redis-server /etc/redis/redis.conf:用配置文件方式启动redis
    • –appendonly yes:打开redis持久化配置
6.3.5 搭建主从结构
1. 关闭防火墙

查看状态

systemctl status firewalld.service

打开防火墙

systemctl start firewalld.service

关闭防火墙

systemctl stop firewalld.service

开启防火墙

systemctl enable firewalld.service

禁用防火墙

systemctl disable firewalld.service
2.安装并配置redis主从复制

安装并配置redis主从复制


七、Dockerfile

7.1 容器转为镜像
docker commit 容器id 镜像名称:版本号
7.2 镜像转为压缩文件
docker save -o 压缩文件名称 镜像名称:版本号
7.3 解压压缩文件
docker load –i 压缩文件名称
7.5 通过dockerfile构建镜像
docker bulid –f dockerfile文件路径 –t 镜像名称:版本号
7.6 部署springboot项目
  1. 定义父镜像:FROM java:版本号
  2. 定义作者信息:MAINTAINER 作者信息
  3. 将jar包添加到容器: ADD springboot.jar app.jar
  4. 定义容器启动执行的命令:CMD java -jar app.jar
  5. 通过dockerfile构建镜像:docker build –f dockerfile文件路径 -t 镜像名称:版本号
  6. 启动容器:docker run -id -p 宿主机端口:容器端口 容器名称
示例:
springboot_dockerfile
FROM java:8
MAINTAINER itheima <itheima@itcast.cn>
ADD springboot-hello-0.0.1-SNAPSHOT.jar app.jar
CMD java -jar app.jar
通过dockerfile构建镜像
docker build -f ./springboot_dockerfile -t app .
启动容器
docker run -id -p 9000:8080 app
测试访问
http://192.168.116.128:9000/hello

八、Docker Compose

8.1 安装

8.1.1 以编译好的二进制包方式安装在Linux系统中
curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
8.1.2 设置文件可执行权限
chmod +x /usr/local/bin/docker-compose
8.1.3 查看版本信息
docker-compose -version
8.1.4 卸载
rm /usr/local/bin/docker-compose

8.2 使用docker compose编排nginx+springboot项目

8.2.1 创建docker-compose目录
mkdir ~/docker-compose
cd ~/docker-compose
8.2.2 编写 docker-compose.yml 文件
version: '3'
services:
 nginx:
  image: nginx
  ports:
   - 80:80
  links:
   - app
  volumes:
   - ./nginx/conf.d:/etc/nginx/conf.d
 app:
  image: app
  expose:
   - "8080"
8.2.3 创建./nginx/conf.d目录
mkdir -p ./nginx/conf.d
8.2.4 在./nginx/conf.d目录下 编写itheima.conf文件
server {
    listen 80;
    access_log off;
    location / {
        proxy_pass http://app:8080;
    }
}
8.2.5 在 ~/docker-compose 目录下启动容器
docker-compose up
8.2.6 测试访问
http://192.168.116.128/hello

若出现502错误,可尝试关闭防火墙测试

systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动

九、Docker私有仓库

9.1 私有仓库搭建

9.1.1 拉取私有仓库镜像
docker pull registry
9.1.2 启动私有仓库容器
docker run -id --name=容器名称 -p 宿主机端口:容器端口 registry
9.1.3 打开浏览器 输入地址http://私有仓库服务器ip:5000/v2/_catalog,看到{“repositories”:[]} 表示私有仓库 搭建成功
9.1.4 修改daemon.json
vim /etc/docker/daemon.json

在上述文件中添加一个key,保存退出。此步用于让 docker 信任私有仓库地址;注意将私有仓库服务器ip修改为自己私有仓库服务器真实ip
{“insecure-registries”: [“私有仓库服务器ip:5000”]}

9.1.5 重启docker服务
systemctl restart docker
docker start registry

9.2 将镜像上传至私有仓库

9.2.1 标记镜像为私有仓库的镜像
docker tag centos:7 私有仓库服务器IP:5000/centos:7
9.2.2 上传标记的镜像
docker push 私有仓库服务器IP:5000/centos:7

9.3 从私有仓库拉取镜像

docker pull 私有仓库服务器ip:5000/centos:7

十、卸载 Docker

10.1 停止 Docker 服务

systemctl stop docker

10.2 查看 Docker 文件包

yum list installed | grep docker

在这里插入图片描述

10.3 查看 Docker rpm 源文件

rpm -qa |grep docker

在这里插入图片描述

10.4 删除 Docker 文件包

yum -y remove docker-ce.x86_64

完成删除后重复 10.210.3 步骤,确保删除干净。

10.5 删除 Docker 的镜像文件

rm -rf /var/lib/docker

一个值得尝试的 AI 赚钱小项目

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐