Docker 安装使用全教程,安装/ 命令大全 / DockerFile镜像制作/ Docker容器编排以及一键安装Nginx+Redis+Mysql/ 可视化工具Portainer (2022版)

在这里插入图片描述
官网: https://docs.docker.com/
官网: https://www.docker.com/
docker 镜像市场: https://hub.docker.com/

一、docker 说明

1.1、docker 核心

1、Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源,Docker 是一个 CS 架构软件。
2、Docker 是一个虚拟化轻量级linux服务器,可以解决我们在开发环境中运行配置问题
3.、Docker的主要目标是‘build ,ship and run any app,anywhere’,一次封装,到处运行
4、容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

1.2、docker 版本问题

.Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了。

1.3、docker 架构( 3大核心)

· 1、Images 镜像 (等于软件)
· 2、Registry 仓库 (等于软件市场)
· 3、Containers 容器 (等于win系统, 可以下载并运行软件)
在这里插入图片描述

1.4、制作运行镜像流程

如: 部署一个springboot 项目到docker

  • 1、第一步 制作并上传镜像 到 docker仓库
  • 2、第二步 拉取镜像并创建一个独立的docker容器
  • 3、第三步 运行容器,启动服务
    在这里插入图片描述

二、安装docker

2.1、安装

注意事项

  • 系统内核需要在 3.1 以上
  • 系统版本需要在 7.1 以上(7.0)
  • lsb 命令 需先安装 : yum install -y redhat-lsb
## 查看系统内核 及 系统版本
uname -r
lsb_release -a

## 卸载旧版本(如果安装过旧版本的话
yum remove docker docker-common docker-selinux docker-engine

## 安装需要的软件包, yum-util 提供yum-config-manager功能,
## 另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2

## 设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

## 查看所有 docker 版本
yum list docker-ce --showduplicates | sort -r

## 指定版本进行安装
yum install -y docker-ce-18.03.1.ce-1.el7.centos

## 启动
systemctl start docker

## 加入开机启动
systemctl enable docker

## 查询 docker进程
ps aux |  grep 'docker'

## 查询 docker版本
docker -v

2.2、配置Docker镜像地址

阿里云镜像地址(可跳过):
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

执行下方命令配置

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://076hklze.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

查看是否配置成功,使用命令: docker info
在这里插入图片描述

三、镜像

docker 镜像市场: https://hub.docker.com/

3.1、docker search 命令

  • docker search -s 30 mysql 只列出点赞数超过30以上
  • 镜像 latest 表示为最新的镜像文件

3.2、docker pull 命令

  • docker pull nginx 默认为 docker pull nginx:latest (拉取最新版本)
  • 拉取时 nginx:版本号 , 版本号可以使用 docker search 命令搜索获取

3.3、docker images 命令

查询镜像展示内容说明

  • REPOSITORY 存储库名称
  • Tag 镜像的标签 不写版本号码 默认下载最新latest镜像
  • IMAGE ID 镜像id
  • CREATED 创建时间
  • SIZE 大小

3.4、其他镜像相关命令

查看 五、docker 命令大全

四、容器

4.1、docker run 创建容器常用命令说明

  • -name 为容器设置名称, 在后续查日志和操作容器可直接使用该命名 (不在使用自动分配的容器 id)
  • -v 表示宿主机的 /docker/xijia 目录为容器中的 /data 的挂载目录
  • -p 指定端口映射,格式为:主机(宿主)端口:容器端口
  • -d 后台运行,不直接进入容器
  • -i 以交互模式运行容器,通常与 -t 同时使用
  • -t 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
  • -m :设置容器使用内存最大值;

4.2、docker run 命令示例

## 使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。
docker run --name mynginx -d nginx:latest

## 使用镜像nginx:latest以后台模式启动一个容器,并将容器的80端口映射到主机随机端口。
docker run -P -d nginx:latest

## 使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data。
docker run -p 80:80 -v /data:/data -d nginx:latest

## 绑定容器的 8080 端口,并将其映射到本地主机 127.0.0.1 的 80 端口上。
$ docker run -p 127.0.0.1:80:8080/tcp ubuntu bash

## 使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
runoob@runoob:~$ docker run -it nginx:latest /bin/bash
root@b8573233d675:/# 

后台启动的docker 容器可以使用以下命令输出实时日志

docker logs -f  <container>    

更多项见: https://www.runoob.com/docker/docker-run-command.html

五、docker 命令大全

5.1、docker 基础相关命令

docker logs <container>            查看container的日志,也就是执行命令的一些输出
docker inspect <image|container>   查看image或container的底层信息
docker version                     查看docker的版本号,包括客户端、服务端、依赖的Go等
docker info                        查看系统(docker)层面信息,包括管理的images, containers数等

systemctl start docker           启动  
sudo systemctl daemon-reload     守护进程重启 
systemctl restart  docker        重启docker服务  
sudo service docker restart      重启docker服务
service docker stop              关闭docker
systemctl stop docker            关闭docker

5.2、images 镜像相关命令

## 搜索下载
docker search  <image>     在镜像仓库中 搜索 image (同 https://hub.docker.com/ 内容)
docker pull  <image>       从镜像仓库 下载 image

## 查询本地镜像
docker images -a           列出所有本地 images
docker images -q           列出所有本地: 只显示镜像的id
docker images --digests    列出所有本地: 显示镜像的摘要信息
docker images --no-trunc   列出所有本地: 显示完整镜像信息

## 删除镜像
docker rmi <image...>      删除一个或多个image
docker rmi -f <image...>   强制删除一个或多个image

5.3、container 容器相关命令

## 创建容器
docker run <image> <command>        使用image创建container并执行相应命令,然后停止
docker run -i -t <image> /bin/bash  使用image创建container并进入交互模式, login shell是/bin/bash
docker run -i -t -p <host_port:contain_port>  将container的端口映射到宿主机的端口
docker attach <container>           attach一个运行中的container

## 启动/停止/重启 容器
docker start <container>      开启container(运行后会自动关闭容器)
docker start -i <container>   启动一个container并进入交互模式(运行后容器一直处于运行状态)
docker stop <container>       停止container
docker restart <container>    重启container

## 查询容器
docker ps         默认显示正在运行中的container(容器)
docker ps -l      显示最后一次创建的container,包括未运行的
docker ps -a      显示所有的container,包括未运行的

## 删除容器
docker rm  <container...>          删除一个或多个container  -f强制删除
docker rm `docker ps -a -q`        删除所有的container
docker ps -a -q | xargs docker rm  同上, 删除所有的container

## 进入容器内部
docker exec -it  f871701b9add  bash   进入容器,f871701b9add  为容器id(docker ps 查看)
docker exec -it  f871701b9add  sh     进入容器方式2, 方式1 可能会遇到错误
exit                                  容器内退出容器

5.4、docker 容器里的服务宕机自动重启

1、在创建容器时(docker run)加入参数
--restart=always
      
2、如果容器已经在创建,则使用docker update 加上自动重启的参数:  
docker update --restart=always <CONTAINER ID/NAME>   

3、查看是否成功
docker inspect <CONTAINER ID/NAME>

查看是否成功
在这里插入图片描述

5.5、制作镜像 相关命令

tag = 版本号
path = linux 文件路径
Dockerfile = 配置文件

docker commit <container> [repo:tag]  将一个 container容器 打成一个新的 image镜像,后面的repo:tag可选, 让其自带修改容器后的内容
docker build <path>                   寻找path路径下名为的Dockerfile的配置文件,使用此配置生成新的image
docker build -t repo[:tag]            同上,可以指定repo和可选的tag
docker build - < <dockerfile>         使用指定的dockerfile配置文件,docker以stdin方式获取内容,使用此配置生成新的image
docker port <container> <container port>    查看本地哪个端口映射到container的指定端口,其实用docker ps

5.6、 删除所有容器和镜像

## 删除所有的容器
docker rm $(docker ps -aq)
docker stop $(docker ps -q) & docker rm $(docker ps -aq) 

## 删除所有的镜像
docker rmi $(docker images -q)

六、Docker 安装相关服务

6.1、安装 nginx 静态文件服务器

镜像查看地址: https://hub.docker.com/search?q=nginx&type=image

1、创建挂载目录
mkdir -p /data/nginx/{conf,conf.d,html,logs}
2、创建启动 nginx 容器
docker run --name nginx81 -d -p 81:80 -v /data/nginx/html:/usr/share/nginx/html nginx

启动命令说明:

  • -name 给容器命令
  • -d 后台启动
  • -p 指定端口, 外部访问 81 映射到 容器内 nginx 的80端口
  • -v 挂载, 容器内的 /usr/share/nginx/html 目录挂载到主目录:/data/nginx/html 下
3、在挂载目录 /data/nginx/html (宿主机目录, 非容器内目录)创建 index.html
## 进入目录
cd /data/nginx/html

## 创建index,html文件
touch index.html

## 编辑(自行使用vim命令进行编辑或远程编辑)
vim index.html
4、 访问Nginx

打开电脑的浏览器服务 ip:81, 如: http://192.168.43.230:81/
后面部署静态文件 直接放到挂载目录就可以了,无需重启Nginx服务
在这里插入图片描述

七、DockerFile 使用

7.1、DockerFile 文件说明

dockerfile 是镜像的配置文件
在需要制作镜像的 dockerfile文件目录执行 docker build 打包成一个镜像文件
在使用 docker run 镜像文件名称运行自己制作的镜像即可

DockerFile编写规范

A.#描述注释
B.指令必须要大写,后面至少需要带至少一个参数;
C.指令是按照从上到下,顺序执行;

DockerFile 文件中的指令
  • 1.FROM 指定父镜像: 基于哪个镜像image构建 指定基础镜像,必须为第一个命令
  • 2.MAINTAINER :维护者
  • 3.RUN: 容器创建的时候执行一段命令 构建镜像时执行的命令
  • 4.ADD: 将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget
  • 5.COPY:功能类似ADD,但是是不会自动解压文件,也不能访问网络资源
  • 6.CMD:构建容器后调用,也就是在容器启动时才进行调用。 .sh执行文件
  • 7.ENV: 设置环境变量
  • 8.EXPOSE: 指定于外界交互的端口
  • 9.VOLUME 用于指定持久化目录
  • 10.WORKDIR 设置进入容器时的路径

7.2、制作一个自定义 Centos 镜像系统

需求: hub仓库中的 centos 系统没有vim 命令, 自己扩展一个有 vim 插件的 centos 系统的镜像
1、创建镜像文件 Dockerfile 并编写内容

## 依赖镜像
FROM  centos
## 作者
MAINTAINER xiaoer
## 配置环境变量
ENV  MYPATH /usr
## 进入容器中默认访问到的目录 (环境变量配置的目录)
WORKDIR $MYPATH
## 容器执行时执行安装 vim 的命令
RUN yum -y install vim
## 暴露外部访问端口
EXPOSE 80
## 启动启用默认执行, 启动默认进入容器
CMD /bin/bash

2、制作镜像并 启用容器

##  运行命令制作镜像 (需要在Dockerfile 文件目录)
docker build -f Dockerfile -t xijia:1.0.0
## 创建容器并启用
docker run -it xijia:1.0.0

7.3、springboot 项目打镜像并运行

7.3.1、创建Dockerfile 文件

在 /docker/xijia-tool-app/server 目录中创建 Dockerfile 文件
如何是自己的目录 和 jar 包记得切换下方对应的内容

## 依赖环境
FROM openjdk:8-jdk-alpine
# 作者
MAINTAINER xijia-xiaoer
## 拷贝/复制文件
ADD xijia-tool-app-server-pro.jar /data/xijia-tool-app-server-pro.jar
## 指定容器目录 /data 挂载到 /var/lib/docker/volumes/随机名, run 命令可更改指定容器目录 /data 挂载位置
VOLUME /data
## run容器后的执行命令
ENTRYPOINT ["java","-jar","-Xms256m","-Xmx512m","-Dspring.profiles.active=pro","/data/xijia-tool-app-server-pro.jar"]
#暴露9062端口
EXPOSE 9062
7.3.2、上传 jar

在这里插入图片描述

7.3.3、执行命令
## 创建镜像
docker build -t xijia-tool-app-server:v1 .

## 创建并启动容器
docker run --name xijia-tool-app-server -v /docker/xijia-tool-app/server:/data -p 9062:9062 -d -it xijia-tool-app-server:v1 /bin/bash

## 查看启动状态,输出实时日志(启动容器后执行)
docker logs -f xijia-tool-app-server

更多操作详见另外一篇 spring-boot项目配置自动部署文章: https://blog.csdn.net/qq_41463655/article/details/121486210

八、Docker Compose 容器编排

8.1、容器编排作用

  • 容器编排 主要作用与环境的一键安装, 比如微服务需要, Mysql,Redis,Nocos,Nginx,Kafka, ES 等诸多环境,
  • 使用容器编排技术可以一次性安装所有的相关环境, 并且可以根据自己的需求对安装顺序做配置, 比如 Nocos 需要 Mysql 的支持, 可以先安装 Redis, 在安装 Nocos
    在这里插入图片描述

8.2、安装 Docker Compose 组件

ginhub 地址: https://github.com/docker/compose/releases

当前使用的的镜像地址(速度快): http://get.daocloud.io/#install-compose

## 拉取镜像,当前我下载的2.2.3 最新版本
curl -L https://get.daocloud.io/docker/compose/releases/download/v2.2.3/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

## 修改文件为可执行
chmod +x /usr/local/bin/docker-compose

## 查看版本
docker-compose --version

## 卸载
sudo rm  /usr/local/bin/docker-compose

版本yml编写规范: https://docs.docker.com/compose/compose-file/compose-versioning/

8.3、Docker Compose 常用命令

docker-compose -h                           # 查看帮助

docker-compose up                           # 创建并运行所有容器
docker-compose up -d                        # 创建并后台运行所有容器
docker-compose -f docker-compose.yml up -d  # 指定模板
docker-compose down                         # 停止并删除容器、网络、卷、镜像。

docker-compose ps         # 列出项目中所有的容器
docker-compose logs       # 查看容器输出日志
docker-compose pull       # 拉取依赖镜像
dokcer-compose config     # 检查配置
dokcer-compose config -q  # 检查配置,有问题才有输出

docker-compose restart    # 重启服务
docker-compose start      # 启动服务
docker-compose stop       # 停止服务

8.4、使用容器编排同时安装 Nginx+Redis+Mysql

docker-compose文档地址: https://docs.docker.com/compose/reference/
docker-compose v3编写文档快速入口: https://docs.docker.com/compose/compose-file/compose-file-v3/

1、创建文件: docker-compose.yml 并添加内容
version: "3.6"
services:
  ## 安装nginx
  nginx:
    # 远程仓库镜像与版本
    image: "nginx:1.21.6"
    # 自定义的容器名称
    container_name: "nginx-1.21.6"
    # 环境变量
    environment:
      - LANG=C.UTF-8
      - LC_ALL=C.UTF-8
    # 挂载数据卷(注意, 需要提前创建 nginx.conf 配置文件并进行配置, 默认创建的是文件夹)
    volumes:
      - "./nginx/nginx1.21.6/data:/data"
      - "./nginx/nginx1.21.6/conf/nginx.conf:/etc/nginx/nginx.conf:ro"
    # 端口映射
    ports:
      - "80:80"
      - "443:443"

  ## 安装redis
  redis:
    image: redis:6.2.6
    container_name: redis-6.2.6
    # 服务宕机自动重启
    restart: always
    environment:
      - TZ=Asia/Shanghai
    ports:
      - 6379:6379
    volumes:
      - ./redis/redis-6.2.6/conf/redis.conf:/usr/local/etc/redis/redis.conf
      - ./redis/redis-6.2.6/data/:/data
    command: ["redis-server","/usr/local/etc/redis/redis.conf"]

  ## 安装mysql
  mysql:
    image: "mysql:5.7.16"
    container_name: "mysql5.7.16"
    environment:
      MYSQL_ROOT_PASSWORD: "123456"
    volumes:
      - "./mysql/mysql5.7/data:/data/mysql"
      - "./mysql/mysql5.7/conf/my.cnf:/etc/my.cnf"
    ports:
      - "3306:3306"
2、对应docker-compose.yml 中的数据卷配置文件

对应的 yml 配置中的 redis + nginx +mysql 的挂载的数据卷 目录及文件可通过下方地址下载
链接:https://pan.baidu.com/s/1lh8l3n1hJs7ehtOK8m67yQ
提取码:v06f
在这里插入图片描述

3、运行进行环境一键安装
## 运行
docker-compose up

等待安装即可

4、测试环境

测试 nginx,访问挂载目录下 /data/html/index.html 文件
挂载目录
在这里插入图片描述
访问
在这里插入图片描述

测试redis , 使用 redis.conf 507行配置文件配置的密码: 123456 连接
在这里插入图片描述
测试数据库, 使用 root yml 配置的 123456 进行连接
在这里插入图片描述

九、Docker 可视话工具 Portainer

9.1、安装 Portainer

## 创建并启动
docker run -d -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

9.2、访问

http://192.168.43.230:9000/

首次进入创建密码
进入后选 Local , 也可以远程连其他主机的docker, 下面可以直接在控制台 进行相关容器管理
注意: 我是用了浏览器翻译插件,所以显示的中文
在这里插入图片描述

结尾

关注公众号【兮家】,不定时分享干货内容哦
在这里插入图片描述

  • 个人开源项目(通用后台管理系统)–> https://gitee.com/wslxm/spring-boot-plus2 , 喜欢的可以看看

  • 本文到此结束,如果觉得有用,动动小手点赞或关注一下呗,将不定时持续更新更多的内容…,感谢大家的观看!

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值