Docker的入门

  • 防火墙(Docker会用到的)
  • 1.防火墙相关命令
  • 2.端口开放相关命令(启动防火墙后,才能使用)
  • Docker的命令
  • 镜像相关的命令
  • 1.查看镜像
  • 2.载入镜像及重命名
  • 3.删除镜像
  • 运行容器
  • 容器相关的命令
  • 1.查看docker本身信息
  • 2.容器的开启自启、关闭自启
  • 3.启动、停止、重启 docker容器
  • 4.查看运行docker容器
  • 5.容器的删除
  • 6.容器的日志查询
  • 7.容器的内部操作
  • 7.1容器部署运行后内部默认的位置
  • 遇到的细节


Docker作为一个软件集装箱化平台,可以让开发者构建应用程序时,将它与其依赖环境一起打包到一个容器中,然后很容易地发布和应用到任意平台中。

docker有3大核心:仓库、镜像、容器 。

核心

作用

仓库

远程仓库:开发者镜像及官方镜像

本地仓库:只保存当前自己使用过的镜像及自定义镜像

作用:用来存放docker镜像位置

镜像

作用:一个镜像就代表一个软件

容器

作用:一个镜像运行一次就会生成一个实例

就是生成一个容器

容器是由镜像实例化而来。
简单来说,镜像是文件,容器是进程。
容器是基于镜像创建的,即容器中的进程依赖于镜像中的文件。

docker 实例步骤:docker安装—>镜像载入—>容器运行

防火墙(Docker会用到的)

Docker应用需要用到各种端口,逐一去修改防火墙设置。非常麻烦,因此建议大家直接关闭防火墙!
启动docker前,一定要关闭防火墙!!

Centos7默认安装了firewalld,如果没有安装的话,可以使用 yum install firewalld firewalld-config进行安装。

1.防火墙相关命令

1.启动防火墙
systemctl start firewalld
2.禁用防火墙
systemctl stop firewalld
3.设置开机启动
systemctl enable firewalld
4.停止并禁用开机启动
sytemctl disable firewalld
5.重启防火墙
firewall-cmd --reload
6.查看状态
systemctl status firewalld或者 firewall-cmd --state
7.查看版本
firewall-cmd --version

2.端口开放相关命令(启动防火墙后,才能使用)

1.开启防火墙端口
firewall-cmd --zone=public --add-port=端口号/tcp --permanent 
例如:firewall-cmd --zone=public --add-port=9003/tcp --permanent 
2.重新加载配置,使配置生效
firewall-cmd --reload
3.查看开放的端口(必须重新加载配置,使配置生效,才能查看的见)
firewall-cmd --list-ports

Docker的命令

#查看docker状态(Active:显示为绿色表示启动)
systemctl status docker
#开启docker
systemctl start docker
#停止docker
systemctl stop docker
# 重启docker
systemctl restart docker
#开机自启docker服务
systemctl enable docker

镜像相关的命令

1.查看镜像

# 查看镜像
docker images
docker images -a #展示所有镜像
docker images -q #只展示镜像的ID
docker images mysql #只展示mysql镜像

2.载入镜像及重命名

# 镜像载入(加载的镜像可能会存在没有名称和标签的现象)
docker load -i 镜像文件
# 重命名镜像名称和标签
docker tag 镜像id name:tag
例如:docker tag 05f1833be2a6 entidaas-apiservice:v1.2.0-SNAPSHOT
# 多次重命名镜像名称和标签,导致出现相同镜像id的镜像,删除一个
docker rmi 镜像名:版本
例如:docker rmi entidaas-apiservice:v1.2.0-SNAPSHOT

3.删除镜像

# 删除镜像
docker image rm 镜像名:版本或者id标识 # docker image rm mysql:8.0.27
docker image rm -f 镜像名:版本或者id标识 # 强制删除
# 简化删除
docker rmi 镜像名:版本

# 组合运用
# 清空本地仓库所有镜像
docker rmi -f $(docker images -q)

运行容器

# 运行一个容器
docker run 镜像名称:版本号
# 运行容器与宿主机进行映射
docker run -p 8080:8080 镜像名称:版本号
# 启动容器映射端口,后台启动
docker run -p 8080:8080 -d 镜像名称:版本号
# 启动容器映射端口,后台启动,指定名称
docker run -p 8080:8080 --name 容器名称 -d 镜像名称:版本号

容器相关的命令

1.查看docker本身信息

# 查看docker信息
docker info
# 查看docker版本
docker version
# 帮助命令
docker --help

2.容器的开启自启、关闭自启

#开启自启
#在docker启动容器可以增加参数来达到,当docker 服务重启之后 自动启动容器,命令如下
docker run --restart=always
#当然如果你的容器已经启动,可以通过update命令进行修改,命令如下:
docker update --restart=always <CONTAINER ID>
#关闭自启
#对某一个容器关闭自启动:
docker update --restart=no <CONTAINER ID>
#组合命令,取消正在运行的容器的自启动,命令如下:
docker update --restart=no $(docker ps -q)

3.启动、停止、重启 docker容器

# 容器的启动
docker start 容器名称或者容器id 
# 容器的重启
docker restart 容器名称或者容器id 
# 重启所有正在运行的容器(组合命令)
docker restart $(docker ps -q)
# 容器的停止
docker stop 容器名称或者容器id 
docker kill 容器名称或者容器id

4.查看运行docker容器

# 查看"正在运行"的容器
docker ps
# 查看运行容器的历史记录(包括运行中和未运行的)
docker ps -a
# 查看最近运行的两个容器
docker ps -a -n=2
# 查看正在运行的容器id
docker ps -q
# 查看所有容器的id
docker ps -aq

5.容器的删除

# 容器的删除((慎重删除!!! 不然数据全没了))
docker rm 容器的id或者名称
docker rm -f 容器的id或者名称
#组合命令(删除 查到的容器)
docker rm -f $(docker ps -aq)

6.容器的日志查询

# 查看日志
docker logs 容器id或名称
# 查看日志
docker logs 容器id或名称 tail -f 
# 查看最后n行日志
docker logs --tail 5 容器id或名称

# 实时展示日志
docker logs -f 容器id或名称
# 加入时间戳展示实时展示日志
docker logs -tf 容器id或名称
# 实时展示日志最后n行日志
docker logs -f 容器id或名称 --tail 1000
docker logs -f --tail 1000  容器id或名称

7.容器的内部操作

# 查看容器的内部进程
docker top 容器id或名称

# 进入容器,与容器内部进行交互
docker exec -it 容器id或名称 bash

# 从容器复制文件到操作系统(用于volumes挂载存在问题时会用到)
docker cp 容器id:路径 操作系统下的路径
# 从操作系统复制文件到容器当中
docker cp 操作系统下的路径 容器id:路径
7.1容器部署运行后内部默认的位置

进入容器内部,一般目录结构默认如下

[root@host-192-168-31-14 ~]# docker exec -it qyyh-apiservice bash
root@host-192-168-31-14:/# ls
back  bin  boot  dev  docker-entrypoint.sh  qyyh-apiservice  etc  home  lib  media	mnt  opt  proc	root  run  sbin  srv  sys  tmp	usr  var  wait

后端应用一般在根目录“/”下
前端h5一般在/usr/share/nginx/html下

遇到的细节

一.镜像载入方面:
Docker镜像文件的后缀通常是.tar,.tar是一种常见的归档文件格式,用于将多个文件和目录打包成一个文件。在Docker中,镜像文件是以.tar格式进行打包和传输的。
示例:docker load -i nginx.tar

公司里面的镜像包一般为test-apiservice-v1.2.0-SNAPSHOT.tar.gz 这种后缀的
相应的命令为 gunzip -c /home/images/test-provider.tar.gz | docker load

gunzip -c 的含义是将解压缩得到的 .tar 文件 标准输出

  • 虽然 gunzip 技术上能够解压 .tar.gz 文件,因为它本质上是一个 gzip 压缩文件,但这样做只会给你一个解压后的 .tar 文件,而不会自动解包其中的内容。因此,如果你想要完全解压和解包 .tar.gz 文件,使用 tar 命令是更直接和常用的方法。

有被同事坑过的,明明他打包出来的是.tar后缀的,结果为了公司的要求.tar.gz 后缀,他直接手改后缀给到我,导致无法使用gunzip -c xx.tar.gz | docker load ,纠结我一阵,
后面使用 file xx.tar.gz 命令查看文件类型
显示为

xx.tar.gz: POSIX tar archive

即表示该文件实际上是以 .tar 扩展名结尾的文件。

如果显示为

xx.tar.gz: gzip compressed data, from FAT filesystem (MS-DOS, OS/2, NT), original size modulo 2^32 161771520 gzip compressed data, reserved method, ASCII, extra field, encrypted, from FAT filesystem (MS-DOS, OS/2, NT), original size modulo 2^32 161771520

就表示应该是以.gz为后缀结尾的文件

所以后面我直接使用 docker load -i xx.tar.gz 载入成功了。