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;
        }
    }
}
相关推荐
繁依Fanyi6 分钟前
简易安卓句分器实现
java·服务器·开发语言·算法·eclipse
C-cat.6 分钟前
Linux|环境变量
linux·运维·服务器
慧都小妮子17 分钟前
Spire.PDF for .NET【页面设置】演示:打开 PDF 时自动显示书签或缩略图
java·pdf·.net
yunfanleo21 分钟前
docker run m3e 配置网络,自动重启,GPU等 配置渠道要点
linux·运维·docker
m512721 分钟前
LinuxC语言
java·服务器·前端
IU宝25 分钟前
C/C++内存管理
java·c语言·c++
瓜牛_gn26 分钟前
依赖注入注解
java·后端·spring
hakesashou27 分钟前
Python中常用的函数介绍
java·网络·python
佚先森36 分钟前
2024ARM网络验证 支持一键云注入引流弹窗注册机 一键脱壳APP加固搭建程序源码及教程
java·html
古月居GYH1 小时前
在C++上实现反射用法
java·开发语言·c++