【云原生系列】Docker学习

目录

一、Docker常用命令

[1 基础命令](#1 基础命令)

[2 镜像命令](#2 镜像命令)

[2.1 docker images 查看本地主机的所有镜像](#2.1 docker images 查看本地主机的所有镜像)

[2.2 docker search 搜索镜像](#2.2 docker search 搜索镜像)

[2.3 docker pull 镜像名[:tag] 下载镜像](#2.3 docker pull 镜像名[:tag] 下载镜像)

[2.4 docker rmi 删除镜像](#2.4 docker rmi 删除镜像)

[2.5 docker build 构建镜像](#2.5 docker build 构建镜像)

[3 容器命令](#3 容器命令)

[3.1 如拉取一个centos镜像](#3.1 如拉取一个centos镜像)

[3.2 运行容器](#3.2 运行容器)

[3.3 进入容器](#3.3 进入容器)

[3.4 退出容器](#3.4 退出容器)

[3.5 列出运行过的容器](#3.5 列出运行过的容器)

[3.6 删除容器](#3.6 删除容器)

[3.7 启动和停止容器](#3.7 启动和停止容器)

[4 docker网络](#4 docker网络)

[4.1 查看docker网络列表](#4.1 查看docker网络列表)

[4.2 查看网络详细信息](#4.2 查看网络详细信息)

[5 docker挂载](#5 docker挂载)

[5.1 查看volume网络列表](#5.1 查看volume网络列表)

[5.2 查看volume详细信息](#5.2 查看volume详细信息)

二、dockerfile文件

[1 规则](#1 规则)

[2 示例](#2 示例)

[3 使用-P和EXPOSE发布随机端口](#3 使用-P和EXPOSE发布随机端口)

[三、docker compose](#三、docker compose)

[1 Compose常用命令](#1 Compose常用命令)

[2 示例](#2 示例)


一、Docker常用命令

1 基础命令

复制代码
docker version          #查看docker的版本信息
docker info             #查看docker的系统信息,包括镜像和容器的数量
docker 命令 --help       #帮助命令(可查看可选的参数)
docker COMMAND --help

命令的帮助文档地址:docker | Docker Docs

2 镜像命令

2.1 docker images 查看本地主机的所有镜像

复制代码
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hello-world   latest    bf756fb1ae65   11 months ago   13.3kB

#解释:

复制代码
1.REPOSITORY  镜像的仓库源

2.TAG  镜像的标签

3.IMAGE ID 镜像的id

4.CREATED 镜像的创建时间

5.SIZE 镜像的大小

可选参数

复制代码
-a/--all 列出所有镜像

-q/--quiet 只显示镜像的id
复制代码
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker search mysql
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                             MySQL is a widely used, open-source relation...   10308     [OK]
mariadb                           MariaDB is a community-developed fork of MyS...   3819      [OK]
mysql/mysql-server                Optimized MySQL Server Docker images. Create...   754                  [OK]
percona                           Percona Server is a fork of the MySQL relati...   517       [OK]
centos/mysql-57-centos7           MySQL 5.7 SQL database server                   86
mysql/mysql-cluster               Experimental MySQL Cluster Docker images. Cr...   79
centurylink/mysql                 Image containing mysql. Optimized to be link...   60                   [OK]


#可选参数

Search the Docker Hub for images

Options:
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print search using a Go template
      --limit int       Max number of search results (default 25)
      --no-trunc        Don't truncate output
      
      
# 搜索收藏数大于3000的镜像
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker search mysql --filter=STARS=3000
NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql     MySQL is a widely used, open-source relation...   10308     [OK]
mariadb   MariaDB is a community-developed fordockerk of MyS...   3819      [OK]

2.3 docker pull 镜像名[:tag] 下载镜像

复制代码
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker pull mysql

# 指定版本下载
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker pull mysql:5.7

2.4 docker rmi 删除镜像

复制代码
#1.删除指定的镜像id
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker rmi -f  镜像id
#2.删除多个镜像id
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker rmi -f  镜像id 镜像id 镜像id
#3.删除全部的镜像id
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker rmi -f  $(docker images -aq)

2.5 docker build 构建镜像

-t: 镜像的名字及标签,通常 name:tag 或者 name 格式;

复制代码
# 会看到 docker build 命令最后有一个.     . 表示当前目录
docker build -t 新镜像名字:版本号 .

3 容器命令

3.1 如拉取一个centos镜像

复制代码
docker pull centos

3.2 运行容器

复制代码
docker run [可选参数] image

#参数说明
--name="名字"           指定容器名字
-d                     后台方式运行
-it                    使用交互方式运行,进入容器查看内容
-p                     指定容器的端口
(
-p ip:主机端口:容器端口  配置主机端口映射到容器端口
-p 主机端口:容器端口
-p 容器端口
)
-P                     随机指定端口(大写的P)

3.3 进入容器

复制代码
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -it centos /bin/bash
[root@bd1b8900c547 /]# ls      
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

3.4 退出容器

复制代码
#exit 停止并退出容器(后台方式运行则仅退出)
#Ctrl+P+Q  不停止容器退出
[root@bd1b8900c547 /]# exit
exit
[root@iZwz99sm8v95sckz8bd2c4Z ~]#

3.5 列出运行过的容器

复制代码
#docker ps 
     # 列出当前正在运行的容器
-a   # 列出所有容器的运行记录
-n=? # 显示最近创建的n个容器
-q   # 只显示容器的编号


[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND       CREATED         STATUS                     PORTS     NAMES
bca129320bb5   centos         "/bin/bash"   4 minutes ago   Exited (0) 3 minutes ago             optimistic_shtern
bd1b8900c547   centos         "/bin/bash"   6 minutes ago   Exited (0) 5 minutes ago             cool_tesla
cf6adbf1b506   bf756fb1ae65   "/hello"      5 hours ago     Exited (0) 5 hours ago               optimistic_darwin

3.6 删除容器

复制代码
docker rm 容器id                 #删除指定的容器,不能删除正在运行的容器,强制删除使用 rm -f
docker rm -f $(docker ps -aq)   #删除所有的容器
docker ps -a -q|xargs docker rm #删除所有的容器

3.7 启动和停止容器

复制代码
docker start 容器id          #启动容器
docker restart 容器id        #重启容器
docker stop 容器id           #停止当前运行的容器
docker kill 容器id           #强制停止当前容器

4 docker网络

4.1 查看docker网络列表

复制代码
docker network ls

4.2 查看网络详细信息

复制代码
docker inspect 网络名

5 docker挂载

5.1 查看volume网络列表

复制代码
docker volume ls

5.2 查看volume详细信息

复制代码
docker inspect 挂载名

windows上启动没有指定路径,默认挂载路径/var/lib/docker/volumes/xxx/_data

在资源管理中输入

  • For Docker version 20.10.+ : \\wsl$\docker-desktop-data\data\docker\volumes
  • For Docker Engine v19.03: \\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes\

二、dockerfile文件

dockerfile是用来构建docker镜像的文件!命令参数脚本!

1 规则

1.每条保留字指令都必须都为大写,且后面都要至少一个参数

2.指令按照从上到下,顺序执行

3.每条指令都会创建一个新的镜像层,并对镜像进行提交

|------------|-----------------------------------------------------------------------------------------------------|
| 关键字 | 作用 |
| FROM | 当前镜像是基于那个镜像的(第一个指令必须是FROM) |
| RUN | 构建镜像时需要运行的指令。可以安装各种依赖 |
| EXPOSE | 当前容器对外暴露的端口号(只是声明,没有实际意义) |
| WORKDIR | 指定在创建容器后,终端默认登陆进来的工作目录,一个落脚点 如果WORKDIR的路径不存在,也会进行创建该路径 |
| ADD | 将宿主机目录下的文件拷贝进镜像。且ADD命令会自动处理下载URL和解压tar包 ADD aa.txt . 将aa.txt拷贝到容器当前路径下 ADD URL . 某文件URL下载地址下载到当前路径下 |
| COPY | 类似于ADD,拷贝文件和目录到镜像中 |
| ENV | 用来在构建镜像过程中设置环境变量 |
| VOLUME | 容器数据卷,用于数据保存和持久化工作(只是声明,没有实际意义) |
| CMD | 指定一个容器启动时要运行的命令 可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换 |
| ENTRYPOINT | 指定一个容器启动时要运行的命令 ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及其参数 |

CMD和ENTRYPOINT区别?

1.CMD里面命令如果在运行容器时进行覆盖

docker run 镜像:版本号 覆盖自己定义命令

2.ENTRYPOINT里面命令如何在运行容器时进行覆盖

docker run --entrypoint=覆盖指令 镜像:版本号 传递参数

2 示例

web项目docker部署,打成镜像。dockerfile文件:

复制代码
# 设置本镜像需要使用的基础镜像
FROM openjdk:8

#ENV APP_PATH = /home/toolset
#
#WORKDIR $APP_PATH

# 把jar包添加到镜像中
ADD toolset-0.0.1-SNAPSHOT.jar /home/toolset/toolset-0.0.1-SNAPSHOT.jar

# 镜像暴露的端口
EXPOSE 9090


# 容器启动命令
#ENTRYPOINT ["sh", "-c", "echo ${APP_PATH}"]
ENTRYPOINT ["java", "-jar", "/home/toolset/toolset-0.0.1-SNAPSHOT.jar", "--spring.profiles.active=test"]

# 设置时区
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone

构建镜像和创建容器

复制代码
# 构建镜像
docker build -t tooset:1.0 .

# 创建容器
docker run -p 9090:9090 --name tooset tooset:1.0

3 使用-P和EXPOSE发布随机端口

因为EXPOSE通常只是作为记录机制,也就是告诉用户哪些端口会提供服务,Docker可以很容易地把Dockerfile里的EXPOSE指令转换成特定的端口绑定规则。只需要在运行时加上-P参数,Docker会自动为用户创建端口映射规则,并且帮助避免端口映射的冲突。

添加如下行到上文使用的Web应用Dockerfile里:

EXPOSE 1000

EXPOSE 2000

EXPOSE 3000

构建镜像,命名为exposed-ports。

docker build -t exposed-ports .

再次用-P参数运行,但是不传入任何特定的-p规则。可以看到Docker会将EXPOSE指令相关的每个端口映射到宿主机的端口上:

复制代码
$ docker run -d -P --name exposed-ports-in-dockerfile exposed-ports 
63264dae9db85c5d667a37dac77e0da7c8d2d699f49b69ba992485242160ad3a 
$ docker port exposed-ports-in-dockerfile
1000/tcp -> 0.0.0.0:49156 
2000/tcp -> 0.0.0.0:49157 
3000/tcp -> 0.0.0.0:49158

三、docker compose

1 Compose常用命令

复制代码
docker-compose -h                           # 查看帮助
docker-compose up                           # 启动所有docker-compose服务
docker-compose up -d                        # 启动所有docker-compose服务并后台运行
docker-compose down                         # 停止并删除容器、网络、卷、镜像。
docker-compose ps                      		  # 展示当前docker-compose编排过的运行的所有容器
docker-compose top                          # 展示当前docker-compose编排过的容器进程
docker-compose restart [service]  					# 重启服务
docker-compose start [service]    					# 启动服务
docker-compose stop [service]     					# 停止服务

docker-compose config     					        # 检查配置,输出docker-compose.yml的配置信息
docker-compose config -q  					        # 检查配置,有问题才有输出

2 示例

工具集toolset项目docker compose部署

GitHub - liangjiabao-5/toolset-dockercompose

相关推荐
Akamai中国2 小时前
SharePlay确保最佳游戏体验
人工智能·云原生·云计算
苏侠客8522 小时前
在docker上部署fastapi的相关操作
docker·容器·fastapi
TDengine (老段)2 小时前
TDengine IDMP 快速体验(方式二 通过 docker)
大数据·数据库·docker·ai·时序数据库·tdengine·涛思数据
婷儿z5 小时前
云原生环境 Prometheus 企业级监控实战
云原生·prometheus
小白不想白a5 小时前
【k8s】k8s中的几个概念性问题
云原生·容器·kubernetes
北巷初晴、5 小时前
Kubernetes-核心概念Service
云原生·容器·kubernetes
掘金-我是哪吒6 小时前
分布式微服务系统架构第163集:哈罗电池设备Netty网关架构
分布式·微服务·云原生·架构·系统架构
NorthCastle10 小时前
Docker 网络-单机版
网络·docker·docker网络基础概念·docker网络基础命令
容器魔方11 小时前
KubeEdge秋季带薪远程实习来了!2025年LFX Mentorship开启申请
云原生·容器·云计算
阿里云云原生12 小时前
金蝶云•星辰基于 SLS 构建稳定高效可观测系统
云原生