Docker安装以及简单使用

1.yum和docker的安装和换源:

yum安装及换源参考如下帖子:

centos7安装yum工具(非网易云镜像)-CSDN博客

docker安装以及换源

1.首先删除旧的docker:

yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine \
    docker-selinux 

2.执行命令安装docker

yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

3.启动和校验

# 启动Docker
systemctl start docker

# 停止Docker
systemctl stop docker

# 重启
systemctl restart docker

# 设置开机自启
systemctl enable docker

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

4.配置镜像加速

# 创建目录
mkdir -p /etc/docker

# 复制内容,注意把其中的镜像加速地址改成你自己的
tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": [
        "http://hub-mirror.c.163.com",
        "https://mirrors.tuna.tsinghua.edu.cn",
        "http://mirrors.sohu.com",
        "https://ustc-edu-cn.mirror.aliyuncs.com",
        "https://ccr.ccs.tencentyun.com",
        "https://docker.m.daocloud.io",
        "https://docker.awsl9527.cn"
    ]
}
EOF

# 重新加载配置
systemctl daemon-reload

# 重启Docker
systemctl restart docker

2.docker基础

1.docker常用命令

命令 说明 文档地址
docker pull 拉取镜像 docker pull
docker push 推送镜像到DockerRegistry docker push
docker images 查看本地镜像 docker images
docker rmi 删除本地镜像 docker rmi
docker run 创建并运行容器(不能重复创建) docker run
docker stop 停止指定容器 docker stop
docker start 启动指定容器 docker start
docker restart 重新启动容器 docker restart
docker rm 删除指定容器 docs.docker.com
docker ps 查看容器 docker ps
docker logs 查看容器运行日志 docker logs
docker exec 进入容器 docker exec
docker save 保存镜像到本地压缩文件 docker save
docker load 加载本地压缩文件到镜像 docker load
docker inspect 查看容器详细信息 docker inspect

用一副图来表示这些命令的关系:

docker run详细解读:

某些命令过于复杂,也可以给命令起别名,来简化命令。

2.数据卷

1.数据卷挂载

数据卷是一个虚拟目录,它将宿主机目录映射到容器内目录,方便我们操作容器内文件,或者方便迁移容器产生的数据。

ps:注意的是数据卷的位置是docker自动生成的,无需本人操作。缺点是目录较深,不便于操作。

常用命令如下:

也可以在创建容器时挂载数据卷:

在执行docker run命令时,使用 -v数据卷:****容器内目录可以完成数据卷挂载

当创建容器时,如果挂载了数据卷且数据卷不存在,会自动创建数据卷

2.目录挂载

在执行docker run命令时,使用 -v本地目录:****容器内目录可以完成本地目录挂载

本地目录必须以"/"或 "./" 开头,如果直接以名称开头,会被识别为数据卷而非本地目录

-v mysql : /var/lib/mysql 会被识别为一个数据卷叫mysql

-v ./mysql : /var/lib/mysql 会被识别为当前目录下的mysql目录

3.数据卷挂载和目录挂载的区别

数据卷由系统自动生成,较方便。但是生成目录较深,当容器生成匿名卷时数据不好迁移。

目录挂载中目录由自己生成,方便查找。缺点是目录需要自己提前生成。

3.自定义镜像

镜像:

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

构建一个Java镜像的步骤:

①准备一个Linux运行环境

②安装JRE并配置环境变量

③拷贝Jar包

④编写运行脚本

镜像是分层构建的,镜像的结构如图:

Dockerfile:

Dockerfile就是一个文本文件,其中包含一个个的指令****(Instruction),用指令来说明要执行什么操作来构建镜像。将来Docker可以根据Dockerfile帮我们构建镜像。常见指令如下:

更新详细语法说明,请参考官网文档: Dockerfile reference | Docker Docs

Dockerfile实例说明:

1.我们可以基于Ubuntu基础镜像,利用Dockerfile描述镜像结构

2.也可以直接基于JDK为基础镜像,省略前面的步骤:

当编写好了dockerfile后执行以下命令构建镜像:

docker build -t 镜像名 Dockerfile目录

实例:

docker build -t myimage:1.0 .

-t:是给镜像起名,格式依然是repository:tag的格式,不指定tag时,默认为latest

. :是指定Dockerfile所在目录,如果就在当前目录,则指定为"."

4.自定义网络

问题:两个容器创建后要求互连,在同一网桥中可以连接,但是当某一服务关闭后ip地址可能被另一个容器占用,因此需要自定义网络让容器通过名字的方式在同一网桥中互连。

加入自定义网络的容器才可以通过容器名互相访问(默认的不行),Docker的网络操作命令如下:

DockerCompose

问题:将每一个服务都去部署到服务器,太繁琐。

Docker Compose通过一个单独的docker-**compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器,帮助我们实现多个相互关联的Docker容器的快速部署。**

docker compose的命令格式如下:

docker compose [OPTIONS] [COMMAND]

实例展示:

单个部署:

多个部署:

version: "3.8"

services:
  mysql:
    image: mysql
    container_name: mysql
    ports:
      - "3306:3306"
    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"
    networks:
      - hm-net
  hmall:
    build:
       context: .
       dockerfile: Dockerfile
    container_name: hmall
    ports:
      - "8080:8080"
    networks:
      - hm-net
    depends_on:
      - mysql
  nginx:
    image: nginx
    container_name: nginx
    ports:
      - "18080:18080"
      - "18081:18081"
    volumes:
      - "./nginx/nginx.conf:/etc/nginx/nginx.conf"
      - "./nginx/html:/usr/share/nginx/html"
    depends_on:
      - hmall
    networks:
      - hm-net
networks:
  hm-net:
    name: hmall
相关推荐
pk_xz12345635 分钟前
Shell 脚本中变量和字符串的入门介绍
linux·运维·服务器
小珑也要变强38 分钟前
Linux之sed命令详解
linux·运维·服务器
Lary_Rock3 小时前
RK3576 LINUX RKNN SDK 测试
linux·运维·服务器
云飞云共享云桌面5 小时前
8位机械工程师如何共享一台图形工作站算力?
linux·服务器·网络
Peter_chq5 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
追风林6 小时前
mac 本地docker-mysql主从复制部署
mysql·macos·docker
一坨阿亮6 小时前
Linux 使用中的问题
linux·运维
dsywws7 小时前
Linux学习笔记之vim入门
linux·笔记·学习
幺零九零零8 小时前
【C++】socket套接字编程
linux·服务器·网络·c++
城南vision8 小时前
Docker学习—Docker核心概念总结
java·学习·docker