Docker安装

在线安装

  1. 安装yum包管理器工具

    1. sudo yum install -y yum-utils
  2. 设置yum仓库

    1. sudo yum-config-manager \
    2. --add-repo \
    3. https://download.docker.com/linux/centos/docker-ce.repo

    ```shell sudo yum-config-manager \ —add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

  1. 3. 更新yum缓存
  2. ```shell
  3. sudo yum makecache fast
  1. 使用yum工具在线安装docker

    1. sudo yum install -y docker-ce docker-ce-cli containerd.io

    离线安装

  2. 在本地下载docker离线安装包

地址:[https://download.docker.com/linux/static/stable/x86_64/docker-20.10.6.tgz](https://download.docker.com/linux/static/stable/x86_64/docker-20.10.6.tgz)
或者:[https://download.docker.com/linux/static/stable/](https://download.docker.com/linux/static/stable/)下载指定版本

  1. 下载离线安装工具

地址:[https://github.com/Jrohy/docker-install/](https://github.com/Jrohy/docker-install/)

  1. 将安装包存放至指定位置

例如:/setup/docker文件夹下

  1. 安装 ```shell

    进入/root/setup/docker 文件夹

    cd /root/setup/docker

为 install.sh添加执行权限

chmod +x install.sh

安装

./install.sh -f docker-20.10.6.tgz

  1. **注意:**必须进入存放安装包的文件夹下执行命令
  2. 5. 查看安装状态
  3. ```shell
  4. docker info

Docker常用指令

Docker服务常用指令

  1. 启动服务

    1. systemctl start docker
  2. 关闭服务

    1. systemctl stop docker
  3. 设置服务开机自启或关闭开机自启

    • 设置开机自启

      1. systemctl enable docker
    • 关闭开机自启

      1. systemctl disable docker
  4. 查看服务状态(是否启动)

    1. systemctl status docker
  5. 重启服务

    1. systemctl restart docker
  6. 设置镜像加速

    1. cat <<EOF > /etc/docker/daemon.json
    2. {
    3. "registry-mirrors": [
    4. "https://docker.mirrors.ustc.edu.cn",
    5. "http://hub-mirror.c.163.com"
    6. ],
    7. "max-concurrent-downloads": 10,
    8. "log-driver": "json-file",
    9. "log-level": "warn",
    10. "log-opts": {
    11. "max-size": "10m",
    12. "max-file": "3"
    13. },
    14. "data-root": "/var/lib/docker"
    15. }
    16. EOF

    Docker镜像常用指令

  7. 下载镜像

命令

  1. docker pull 镜像名

示例:

  1. docker pull hello-world
  1. 浏览下载镜像

    1. docker images
  2. 查看镜像详情

命令:

  1. docker inspect 镜像名或镜像id

示例:

  1. docker inspect hello-world
  1. 查看镜像历史

命令:

  1. docker history 镜像名

示例:

  1. docker history hello-world
  1. 导出镜像文件

导出镜像文件需要在导出后存放镜像文件的文件夹中执行命令
命令:

  1. docker save 镜像名 | gzip > 导出后的镜像文件名.tar.gz

示例:

  1. docker save hello-world | gzip > hello-world.tar.gz
  1. 删除镜像文件

命令格式:

  1. docker image rm 镜像名或镜像id

示例:

  1. docker image rm hello-world
  1. 导入镜像文件

导入镜像文件需要在镜像文件所在的文件夹下执行命令\
命令:

  1. docker load < 镜像文件名.tar.gz

示例:

  1. docker load < hello-world.tar.gz
  1. 运行镜像文件

命令:

  1. docker run 镜像名

示例:

  1. docker run hello-world

Doker操作容器常用命令

  • -i 交互模式
  • -t 终端模式
  • -d 后台运行模式
  • -e 指定环境(指定启动mysql时的容器密码)
  • -p 端口映射
  • -v 挂载(目录或者数据卷)
  • —name 重命名容器
  1. 创建并启动容器

命令格式:

  1. docker run -it 镜像名或镜像id bash

示例:

  1. docker run -it centos:7 bash

注意:

  • 镜像id为id前几位即可(一般前三位即可)
  • -it 这是两个参数(-i表示交互式操作, -t 表示终端)
  • bash 表示进入操作终端,基于交互式进行相关操作
    1. 查看docker中的容器

查看运行中的容器:

  1. docker ps

查看运行中的所有容器:

  1. docker ps -a

参数a代表all即全部

  1. 查看容器日志信息

命令格式:

  1. docker container logs 容器id #自己的容器id(一般写前三位即可)

示例:

  1. docker container logs 802 #自己的容器id(一般写前三位即可)
  1. 停止或重启容器

停止容器

  1. docker container stop 容器id

重启容器

  1. docker container restart 容器id
  1. 进入指定容器和退出 ```shell

    进入指定容器

    docker exec -it 容器id bash

退出

exit

  1. 6. 删除容器
  2. ```shell
  3. docker container rm 容器id
  4. #删除运行中的容器
  5. docker container -f rm 容器id
  1. 清理所有终止状态容器

    1. docker container prune

    Docker数据卷操作命令

    概述

    容器中数据管理有两种方式:

  2. 使用数据卷

    数据卷是一个可供一个或多个容器使用的特殊目录,可以在容器之间共享和重用,默认会一直存在,即使容器被删除。

  3. 将容器中的数据目录挂载至主机中

    命令

  4. 创建数据卷 ```shell

    命令格式

    docker volume create 数据卷名

示例

docker volume create container-vol

  1. 2. 查看数据卷
  2. - 查看所有数据卷
  3. ```shell
  4. docker volume ls
  • 查看指定数据卷信息 ```shell

    命令格式

    docker volume inspect 数据卷名

示例

docker volume inspect container-vol

  1. 3. 将数据卷挂载至指定容器
  2. 其中若容器中的目录不存在时会自动创建
  3. ```shell
  4. #命令格式
  5. docker run -it --mount source=数据卷名,target=容器中的文件目录 容器名 bash
  6. #示例
  7. docker run -it --mount source=container-vol,target=/root centos:7 bash

简写格式如下:

  1. #格式
  2. docker run -it -v 数据卷名:容器中文件目录 容器名 bash
  3. #示例
  4. docker run -it -v container-vol:/root centos:7 bash
  1. 删除数据卷

当数据卷被使用时无法删除,所以若要想删除数据卷应当先删除容器

  1. #命令格式
  2. docker volume rm 数据卷名
  3. #示例
  4. docker volume rm container-vol

清理无主数据卷

  1. docker volume prune
  1. 挂载至指定主机目录

在启动容器时,以目录直接挂载的方式进行数据操作

  1. #命令格式
  2. docker run -it -v 主机文件目录:容器文件目录 容器名 bash
  3. #示例
  4. docker run -it -v /usr/app:/opt/app centos:7 bash
  1. 查看挂载目录信息 ```shell

    命令格式

    docker inspect 容器id

示例

docker inspect 91a #91a 为容器id

  1. <a name="DyjEi"></a>
  2. # 制作镜像
  3. <a name="QHvyv"></a>
  4. ## 概述
  5. 制作镜像需要使用Dockerfile文件,Dockerfile为文本文件,其内写了关于构建镜像的各种指令,一般基于此文件来构建镜像.
  6. <a name="d1a4w"></a>
  7. ## 制作
  8. 制作自定义jdk镜像
  9. 1. 准备
  10. 准备Centos7镜像(所有的镜像文件都需要给予一个空的操作系统镜像来制作镜像文件)<br />jdk压缩包
  11. 2. 创建Dockerfile文件
  12. 在存放jdk压缩包与centos7的文件目录中创建Dockerfile文件,代码如下:
  13. ```shell
  14. FROM centos:7
  15. ADD jdk-8u51-linux-x64.tar.gz /usr/local/docker
  16. ENV JAVA_HOME=/usr/local/docker/jdk1.8.0_51 \
  17. PATH=/usr/local/docker/jdk1.8.0_51/bin:$PATH
  18. CMD ['bash']

其中第一行FROM命令标识使用的操作系统镜像,第二行ADD命令为讲宿主机下的文件追加至容器中的指定目录下,ENV用于设置环境变量,CMD标识命令格式

  1. 创建镜像

需要在jdk以及Dockerfile所在的文件进行执行

  1. docker build -t jdk:8 .
  2. #不要丢掉这里的点,点表示使用本目录下的所有文件进行构建,-t表示镜像标识(镜像名),是tag单词的缩写.
  1. 使用JDK镜像进行sentinel启动

将sentinel的jar包拷贝至宿主机指定目录

  1. docker run -d -p 8180:8080 --name sentinel \ #-p表示进行宿主机与容器端口映射
  2. -v /root/servers:/usr/sca \ #-v表示进行目录挂载
  3. jdk:8 java -jar /usr/sca/sentinel-dashboard-1.8.0.jar
  1. -d 表示后台运行
  2. -p 用于实现端口映射(假设外部要访问这个容器,必须要做端口映射)
  3. –-name 表示为启动的容器起一个名字

    示例:

    制作sentinel镜像

  4. 准备jdk,sentinel压缩包,jdk压缩包

  5. Dockerfile文件命令如下

    1. FROM centos:7
    2. ADD jdk-8u51-linux-x64.tar.gz /usr/local/
    3. ADD sentinel-dashboard-1.8.0.jar /usr/local/
    4. ENV JAVA_HOME=/usr/local/jdk1.8.0_51 \
    5. PATH=/usr/local/jdk1.8.0_51/bin:$PATH
    6. EXPOSE 8080
    7. ENTRYPOINT ["java","-jar","/usr/local/sentinel-dashboard-1.8.0.jar"]

    命令详解:
    image.png
    ENTRYPOIN启动sentinel的命令,EXPOSE表示占用的容器端口

    Docker镜像安装

    安装Mysql镜像

  6. 拉取要安装的版本的mysql

    1. docker pull mysql:8.0.23
  7. 启动镜像

    1. sudo docker run -p 3306:3306 --name mysql \ #端口映射并重命名为mysql
    2. -v /usr/local/docker/mysql/mysql-files:/var/lib/mysql-files \ #文件挂载
    3. -v /usr/local/docker/mysql/conf:/etc/mysql \
    4. -v /usr/local/docker/mysql/logs:/var/log/mysql \
    5. -v /usr/local/docker/mysql/data:/var/lib/mysql \
    6. -e MYSQL_ROOT_PASSWORD=root \ #数据库密码
    7. -d mysql:8.0.23 #数据库版本
  8. 进入mysql镜像 ```shell sudo docker exec -it mysql bash

启动服务

docker start mysql

停止服务

docker stop mysql

设置开机自启

docker update mysql —restart=always

  1. <a name="JXaE5"></a>
  2. ## 安装Redis
  3. 1. 下载镜像文件
  4. ```shell
  5. docker pull redis
  1. 准备配置文件 ```shell

    创建redis配置文件目录

    mkdir -p /usr/local/docker/redis01/conf

在配置文件录下创建redis.conf配置文件

touch /usr/local/docker/redis01/conf/redis.conf

  1. 3. 创建redis实例并启动
  2. ```shell
  3. sudo docker run -p 6379:6379 --name redis01 \ #进行端口映射并重命名
  4. -v /usr/local/docker/redis01/data:/data \ #进行目录挂载
  5. -v /usr/local/docker/redis01/conf/redis.conf:/etc/redis/redis.conf \
  6. -d redis redis-server /etc/redis/redis.conf
  1. 访问redis服务器 ```shell docker exec -it redis01 bash

检查版本

redis-server -v

redis-cli -v

登录redis(默认不需要密码)

redis-cli

合并以上两个命令

docker exec -it redis01 redis-cli

  1. 5. 停止与启动服务
  2. ```shell
  3. #启动redis服务
  4. docker start redis01
  5. #停止redis服务
  6. docker stop redis01
  7. #重启 redis 服务
  8. docker restart redis01

安装Nginx

  1. 拉取nginx镜像

    1. docker pull nginx
  2. 创建数据卷 ```shell docker volume create nginx-vol

查看数据卷对应的宿主机目录

docker inspect nginx-vol

  1. 3. 启动nginx服务
  2. ```shell
  3. docker run --name nginx -p 80:80 -v nginx-vol:/etc/nginx -d nginx
  1. 停止与启动服务 ```shell

    启动nginx服务

    docker start nginx

停止nginx服务

docker stop nginx

重启nginx服务

docker restart nginx

  1. <a name="ljIvv"></a>
  2. ## 安装Nacos
  3. 1. 拉取nacos
  4. ```shell
  5. docker pull nacos/nacos-server:1.4.1
  1. 配置nacos ```shell

    在linux环境下启动并登录mysql

    docker exec -it mysql bash

mysql -uroot -p

运行容器目录下的sql文件

source /etc/mysql/nacos-mysql.sql #这里的/etc/mysql为容器中的一个目录(要选择你自己挂载的目录)

  1. 3. 创建并启动nacos容器
  2. ```shell
  3. docker run \
  4. -e TZ="Asia/Shanghai" \
  5. -e MODE=standalone \
  6. -e SPRING_DATASOURCE_PLATFORM=mysql \
  7. -e MYSQL_DATABASE_NUM=1 \
  8. -e MYSQL_SERVICE_HOST=192.168.126.129 \
  9. -e MYSQL_SERVICE_PORT=3306 \
  10. -e MYSQL_SERVICE_USER=root \
  11. -e MYSQL_SERVICE_PASSWORD=root \
  12. -e MYSQL_SERVICE_DB_NAME=nacos_config \
  13. -p 8848:8848 \
  14. --name nacos \
  15. --restart=always \
  16. -d nacos/nacos-server:1.4.1

参数说明

  • 单节点模式

MODE=standalone

  • 数据库地址

MYSQL_SERVICE_HOST

  • 数据库用户名

MYSQL_SERVICE_USER

  • 数据库密码

MYSQL_SERVICE_PASSWORD

  • 需连接的数据库名称

MYSQL_SERVICE_DB_NAME

  • 端口映射

-p 8848:8848

  • 任意时候重启容器,开机就能自动启动容器(需设置docker为开机自启)

    容器互联

    概述

    Docker 中存在多个容器时,容器与容器之间经常需要进行通讯,例如nacos访问mysql,redis集群中各个节点之间的通讯。

    解决方案

  1. 两个容器通过宿主机进行通讯(容器中的端口会映射到宿主机上)
  2. 两个容器之间直接通过虚拟网络进行连接,但是需要我们在docker中创建网络。

    虚拟网络设置

  3. 新建网络 ```powershell

    命令格式

    docker network create -d bridge 网络名称

示例

docker network create -d bridge t-net #t-net为自己起的网络名称

  1. -d driver,网络类型,默认 bridge
  2. 2. 查看网络信息
  3. ```powershell
  4. #查看关于network的命令
  5. docker network
  6. #列出所属网络信息
  7. docker network ls
  8. #查看指定网络信息
  9. docker inspect 网络id
  10. #示例
  11. docker inspect fa8
  1. 实现容器互联 ```powershell

    基于centos:7这个镜像启动cenos7容器,并加入到t-net这个网络

    docker run -it —name app1 —network t-net centos:7 #容器名为app1

新建终端基于centos:7这个镜像启动cenos7容器,并加入到t-net这个网络

docker run -it —name app2 —network t-net centos:7 #容器名为app2

  1. 测试容器互通
  2. ```powershell
  3. #在容器app2中
  4. ping app1
  5. #在容器app1中
  6. ping app2

若能ping通则实现容器互联