docker在linux上的安装与使用

我的操作系统centos7本地vm

docker安装

1、卸载旧版本

如果系统中已经存在旧的Docker,则先卸载

复制代码
yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine

2、配置一个Docker的yum仓库

首先要安装一个yum工具

复制代码
yum install -y yum-utils

安装成功后,执行命令,配置Docker的yum源:

复制代码
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

3、安装docker

执行命令,安装Docker

复制代码
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

4、启动和校验

复制代码
# 启动Docker
systemctl start docker

# 停止Docker
systemctl stop docker

# 重启
systemctl restart docker

# 设置开机自启
systemctl enable docker

# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps

5、配置镜像

注册阿里云账号

首先访问阿里云网站:阿里云-计算,为了无法计算的价值注册一个账号

在首页的产品中,找到阿里云的容器镜像服务

页面向下滚动,即可找到配置的文档说明:

复制代码
# 创建目录
mkdir -p /etc/docker

# 复制内容,注意把其中的镜像加速地址改成你自己的
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
}
EOF

# 重新加载配置
systemctl daemon-reload

# 重启Docker
systemctl restart docker

docker使用

安装mysql

复制代码
docker run -d \
>   --name mysql \
>   -p 3306:3306 \
>   -e TZ=Asia/Shanghai \
>   -e MYSQL_ROOT_PASSWORD=123 \
> mysql

查看docker安装的容器

复制代码
docker ps

docker 打包

复制代码
docker save -o nginx.tar nginx:latest

删除镜像

复制代码
docker rmi nginx:latest

加载

复制代码
docker load -i nginx.tar

dockerfile构建镜像

复制代码
docker build -t docker-demo .

查看镜像

复制代码
docker images

创建容器并且运行

复制代码
docker run -d --name nginx -p 80:80 nginx

查看进程

复制代码
docker ps

也可以加格式化方式访问,格式会更加清爽

复制代码
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}" 

停止容器

复制代码
docker stop nginx

查看所有容器

复制代码
docker ps -a --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"

运行容器

复制代码
docker start nginx

查看容器详细信息

复制代码
docker inspect nginx

进入容器,查看容器内目录

复制代码
docker exec -it nginx bash

查看容器中的目录

复制代码
ls -l

退出

复制代码
exit

进入MySQL并且使用mysql客户端

复制代码
docker exec -it mysql mysql -uroot -p

删除容器

复制代码
docker rm nginx

强制删除容器

复制代码
docker rm -f nginx

查看日志

复制代码
docker logs nginx

持续查看日志

复制代码
docker logs -f nginx

起别名

复制代码
vi ~/.bashrc

alias dps='docker ps --format "table{{.ID}}\t{{.Image}}\t{{.Ports}}\t{{Status}}\t{{.Names}}"'
alias dis='docker images'

source ~/.bashrc

数据卷命令

创建数据卷

复制代码
docker volume create

查看所有数据卷

复制代码
docker volume ls

删除指定数据卷

复制代码
docker volume rm

查看某个数据卷详情

复制代码
docker volume inspect

清除数据卷

复制代码
docker volume prune

docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx
复制代码
cd /var/lib/docker/volumes/html/_data

mysql容器本地挂载

基于宿主机目录实现MySQL数据目录、配置文件、初始化脚本的挂载(

挂载/root/mysql/data到容器内的/var/lib/mysql目录 挂载/root/mysql/init到容器内的/docker-entrypoint-initdb.d目录,携带课前资料准备的SQL脚本 挂载/root/mysql/conf到容器内的/etc/mysql/conf.d目录,携带课前资料准备的配置文件

复制代码
mkdir mysql
cd mysql/
mkdir data
mkdir conf
mkdir init

docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  -v /root/mysql/data:/var/lib/mysql \
  -v /root/mysql/conf:/etc/mysql/conf.d \
  -v /root/mysql/init:/docker-entrypoint-initdb.d \
  mysql

dockerfile自定义镜像

镜像就是包含了应用程序、程序运行的系统函数库、运行配置等文件的文件包。构建镜像的过程其实就是把上述文件打包的过程。

官网文档: https://docs.docker.com/engine/reference/builder

dockerfile构建镜像

复制代码
docker build -t docker-demo .

运行镜像

复制代码
docker run -d --name dd -p 8080:8080 docker-demo

查看日志 dd是容器名称

复制代码
docker logs -f dd

网络网桥

创建网络

复制代码
docker network create 网络名称

连接

复制代码
docker network connect 网络名 容器名

容器创建并且连接网络

复制代码
docker run -d --name 容器名称 -p 8080:8080 --network 网络名称 镜像名称

访问ping 容器名称

nginx 静态资源挂载

复制代码
docker run -d \
--name nginx \
-p 18080:18080 \
-p 18081:18081 \
-v /root/nginx/html:/usr/share/nginx/html \
-v /root/nginx/nginx.conf:/etc/nginx/nginx.conf \
--network 网络名称\
nginx

Docker Compose

Docker Compose通过一个单独的docker-compose,yml 模板文件(YAML格式)来定义一组相关联的应用容器帮

助我们实现多个相互关联的Docker容器的快速部署。

docker-compose.yml 文件

复制代码
# Docker Compose 文件版本,这里使用的是 3.8 版本  
version: "3.8"  
  
# 定义服务  
services:  
  
  # MySQL 服务  
  mysql:  
    # 使用官方的 MySQL 镜像  
    image: mysql  
    # 设置容器的名称为 mysql  
    container_name: mysql  
    # 端口映射,将宿主机的 3306 端口映射到容器的 3306 端口  
    ports:  
      - "3306:3306"  
    # 环境变量,设置时区为中国上海,并设置 MySQL root 用户的密码为 123  
    environment:  
      TZ: Asia/Shanghai  
      MYSQL_ROOT_PASSWORD: 123  
    # 卷挂载,将配置文件、数据文件和初始化脚本分别挂载到容器内的相应目录  
    volumes:  
      - "./mysql/conf:/etc/mysql/conf.d"  
      - "./mysql/data:/var/lib/mysql"  
      - "./mysql/init:/docker-entrypoint-initdb.d"  
    # 将该服务连接到名为 hm-net 的网络  
    networks:  
      - hm-net  
  
  # 自定义服务 hmall  
  hmall:  
    # 使用当前目录下的 Dockerfile 构建镜像  
    build:   
      context: .  
      dockerfile: Dockerfile  
    # 设置容器的名称为 hmall  
    container_name: hmall  
    # 端口映射,将宿主机的 8080 端口映射到容器的 8080 端口  
    ports:  
      - "8080:8080"  
    # 将该服务连接到名为 hm-net 的网络  
    networks:  
      - hm-net  
    # 依赖 MySQL 服务,确保 MySQL 服务启动后再启动 hmall 服务  
    depends_on:  
      - mysql  
  
  # Nginx 服务  
  nginx:  
    # 使用官方的 Nginx 镜像  
    image: nginx  
    # 设置容器的名称为 nginx  
    container_name: nginx  
    # 端口映射,将宿主机的 18080 和 18081 端口分别映射到容器的 18080 和 18081 端口  
    ports:  
      - "18080:18080"  
      - "18081:18081"  
    # 卷挂载,将自定义的 Nginx 配置文件和 HTML 目录挂载到容器内的相应目录  
    volumes:  
      - "./nginx/nginx.conf:/etc/nginx/nginx.conf"  
      - "./nginx/html:/usr/share/nginx/html"  
    # 依赖 hmall 服务,确保 hmall 服务启动后再启动 Nginx 服务  
    depends_on:  
      - hmall  
    # 将该服务连接到名为 hm-net 的网络  
    networks:  
      - hm-net  
  
# 定义网络  
networks:  
  # 创建一个名为 hm-net 的网络,并在服务的 networks 中引用它  
  hm-net:  
    # 设置网络的名称,这里使用 'hmall' 加上 '网络' 的描述性名称  
    name: hmall-net

运行

复制代码
docker compose up -d

结束

复制代码
docker compose down  

项目部署流程

mysql数据卷自定义挂载

复制代码
docker run -d \
  --name 容器名称 \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  -v /root/mysql/data:/var/lib/mysql \  //数据
  -v /root/mysql/conf:/etc/mysql/conf.d \   //配置文件
  -v /root/mysql/init:/docker-entrypoint-initdb.d \ //脚本
  镜像名称
// mysql
docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  -v /root/mysql/data:/var/lib/mysql \
  -v /root/mysql/conf:/etc/mysql/conf.d \
  -v /root/mysql/init:/docker-entrypoint-initdb.d \
  mysql

创建网络

复制代码
docker network create 网络名称

连接将要用的环境容器连接到同一个网络比如mysql容器

复制代码
docker network connect 网络名 容器名

关键yml

项目打包mvn package

dockerfile

复制代码
# 基础镜像
FROM openjdk:11.0-jre-buster
# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 拷贝jar包
COPY hm-service.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]

构建镜像

复制代码
docker build -t 镜像名称 .

容器创建并且连接网络

复制代码
docker run -d --name 容器名称 -p 8080:8080 --network 网络名称 镜像名称

nginx配置文件挂载

自己的静态资源放/root/nginx/html中

/root/nginx/下放nginx.conf

nginx 容器创建运行并且挂载网络连接

复制代码
docker run -d \
--name nginx \
-p 18080:18080 \
-p 18081:18081 \
-v /root/nginx/html:/usr/share/nginx/html \
-v /root/nginx/nginx.conf:/etc/nginx/nginx.conf \
--network 网络名称\
nginx

nginx.conf

复制代码
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/json;

    sendfile        on;
    
    keepalive_timeout  65;

    server {
        listen       18080;
        # 指定前端项目所在的位置
        location / {
            root /usr/share/nginx/html/静态资源文件夹1;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        location /api {
            rewrite /api/(.*)  /$1 break;
            proxy_pass http://项目容器名称:8080;
        }
    }
    server {
        listen       18081;
        # 指定前端项目所在的位置
        location / {
            root /usr/share/nginx/html/静态资源文件夹2;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        location /api {
            rewrite /api/(.*)  /$1 break;
            proxy_pass http://项目容器名称:8080;
        }
    }
}
相关推荐
颜淡慕潇1 分钟前
Redis 实现分布式锁:深入剖析与最佳实践(含Java实现)
java·redis·分布式
程序员秘密基地7 分钟前
基于vscode,idea,java,html,css,vue,echart,maven,springboot,mysql数据库,在线考试系统
java·vue.js·spring boot·spring·web app
何中应8 分钟前
【设计模式-5】设计模式的总结
java·后端·设计模式
吾日三省吾码26 分钟前
Spring 团队详解:AOT 缓存实践、JSpecify 空指针安全与支持策略升级
java·spring·缓存
zyjyyds11332 分钟前
win11系统 Docker Desktop 突然提示Docker Engine stopped解决情况之一
运维·docker·容器
Altairr33 分钟前
Docker基础(一)
运维·docker·容器·eureka
搬运Gong35 分钟前
Dockerfile使用与最佳实践
docker·容器·虚悬镜像
风象南44 分钟前
SpringBoot的5种日志输出规范策略
java·spring boot·后端
筏.k1 小时前
grep、wc 与管道符快速上手指南
linux
咖啡啡不加糖1 小时前
深入理解MySQL死锁:从原理、案例到解决方案
java·数据库·mysql