Docker基础

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 总结一些docker的基础概念与用法


安装配置


  • 安装依赖项


yum install -y yum-utils device-mapper-persistent-data lvm2


  • 更换镜像源


yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo


  • 安装docker-ce


yum install docker-ce docker-ce-cli containerd.io


  • 设置开机启动并启动docker


systemctl enable docker && systemctl start docker


  • 安装指定版本docker-compose


sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.26.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose


  • 命令授权


chmod +x /usr/local/bin/docker-compose


  • 命令软链接


ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose


Dockerfile编写

命令

说明

示例

from

定制的镜像都是基于 FROM 的镜像。

env

定义了环境变量,在后续的指令中,就可以使用这个环境变量。

ENV TZ=Asia/Shanghai

arg

构建参数,与 ENV 作用一致。不过作用域不一样。只有 docker build 的过程中有效,构建好的镜像内不存在此环境变量。

run

用于执行后面跟着的命令行命令。有两种格式

1. shell格式:RUN <命令行命令>

2. exec格式:RUN ["可执行文件","参数1","参数2"]

每执行一次RUN命令,就会加一层镜像,最终的镜像会越来越大,可以用&&将多个命令连接起来,这样就只会有一层镜像了。

RUN ["./test.php", "dev", "offline"]

RUN ["./test.php", "dev", "offline"]

RUN ./test.php dev offline

copy      

从上下文目录中复制文件或者目录到容器中的指定路径下面

COPY ./edge-management/build/libs/* /app/

add

功能和COPY类似,官方推荐使用COPY    

cmd

1. CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。
2. 类似于RUN,但是CMD和RUN 运行的时间点不同,CMD是在docker run 的时候运行,RUN是在Docker build的时候运行
3. 如果 Dockerfile 中如果存在多个 CMD 指令,那么仅最后一个生效。

entrypoint

类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。

ENTRYPOINT exec java $JAVA_OPTS -jar /app/*

volume

定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。在启动容器 docker run 的时候,也可以通过 -v 参数修改挂载点。 避免重要的数据,因容器重启而丢失,也可以避免容器不断变大。

expose

仅仅只是声明端口
1. 帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射。
2. 在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口

workdir

指定工作目录,用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。(WORKDIR 指定的工作目录,必须是提前创建好的)。docker build 构建镜像过程中的,每一个 RUN 命令都是新建的一层。只有通过 WORKDIR 创建的目录才会一直存在。


常用命令


  • [ ] 获取所有容器的IP列表


docker inspect --format='{{.Name}}:{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)


  • [ ] 获取容器的日志位置


docker inspect --format='{{.LogPath}}' name


  • [ ] 查看容器的启动策略


docker inspect --format='{{.HostConfig.RestartPolicy.Name}}' name


  • [ ] 容器内部安装vim


apt-get update && apt-get install vim


  • [ ] 获取所有容器的版本


docker ps | awk {'print $2'}


  • [ ] 查看指定时间段的日志


docker logs --since '2021-01-11T17:13:05.999999999'  --until='2021-01-11T17:15:05.999999999' name


  • [ ] 不省略显示,获取全部信息 --no-trunc  
  • [ ] update更新参数


docker update --restart=always


  • [ 其它
  1. docker pause/unpause :暂停/恢复容器中所有的进程。
  2. docker top : 查看容器中运行的进程信息,支持 ps 命令参数。
  3. docker --net=host 宿主机网络共享


常见问题

  1. docker报错磁盘空间不够了,是由于镜像分层越来越多,磁盘空间不够用,就需要做一个软链到外部。以后空间增长也是在磁盘外部。ln -s var/lib/docker opt/docker
  2. docker login 报错Error saving credentials:,是由于存储凭证错误;解决就是安装 apt install gnupg2 pass
  3. 容器停止了,但是某些文件并没有挂载出来,可以去docker的存储目录中找到这个文件,一般在diff下


参数

参数

说明

-g / --graph="/var/lib/docker"

设置Docker运行时根目录

--ip="0.0.0.0"

设置容器绑定IP时使用的默认IP地址

--rm

当容器退出时自动移除这个容器

-e, --env list

设置环境变量

-v, --volume list

绑定安装卷

--mount mount

将文件系统挂载附加到容器


配置文件


  • Docker 的配置文件可以设置大部分的后台进程参数,在各个操作系统中的存放位置不一致
  1. 在 ubuntu 中的位置是:/etc/default/docker
  2. 在 centos6 中的位置是:/etc/sysconfig/docker
  3. 在 centos7 中的位置是:/etc/docker/


  • 在/var/lib/docker中得文件夹
  1. container 运行得容器
  2. overlay2 镜像存储位置
  3. volumes docker自己创建得文件


清理空间


  • 删除所有关闭的容器:

docker ps -a | grep Exit | cut -d ' ' -f 1 | xargs docker rm


  • 删除dangling 镜像(无tag 镜像):

docker rmi $(docker images | grep "<none>" | awk {'print $3'})


  • 删除dangling 数据卷(无用volume):

docker volume rm $(docker volume ls -qf dangling=true)


  • 删除所有停止的容器:

docker contailer/image/volume prune


容器迁移

save / load

  1. docker save -o images.tar mysql:8.6
  2. docker load -i images.tar

export / import

  1. docker export -o mysql.tar mysql:8.6
  2. docker import mysql.tar mysql:8.6  
  3. 区别
  1. save保存的是镜像,export保存的是容器
  2. load载入镜像包,import载入容器包,但两者都会恢复为镜像
  3. load不能对载入的镜像重命名,import可以为镜像指定新名称


管理工具


portainer


docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock --restart=always --name prtainer portainer/portainer


file-browser


docker run -d --name filebrowser -p 9991:80 --restart=always -v /data/file-borwser:/srv filebrowser/filebrowser



minio

docker run -d --name minio-server -p 9110:9000 -p 9111:9111 --restart=always -v /home/admina/minio/data:/data minio/minio:RELEASE.2022-04-08T19-44-35Z server /data --console-address ":9111"


双环的现场环境这两天edge-connection挂了三次,有两次是服务器重启导致的


现象就是:页面报错边缘连接服务异常,edge-connection日志一直是正常,只有最早在启动edge-connection的时候

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
应用服务中间件 Linux Shell
Docker基础 docker创建centos7容器然后安装配置Nginx,并在浏览器访问
docker 在容器里下载配置nginx,并可在浏览器上访问的方法, 并将容器转为镜像,或将容器转为文件,再将文件转为镜像的两种方式,创建容器时绑定端口的方法,
Docker基础 docker创建centos7容器然后安装配置Nginx,并在浏览器访问
|
运维 安全 持续交付
利用ansible的角色快速批量一键部署基础docker环境
利用ansible的角色快速批量一键部署基础docker环境
448 0
利用ansible的角色快速批量一键部署基础docker环境
|
存储 缓存 安全
Docker自测题(基础、容器、镜像等)(上)
什么是 Docker ? Go 语言开发,容器虚拟化技术,C/S 架构,具有隔离、快速、轻便的特点。
|
NoSQL Redis 数据库
【Docker 基础教程】容器数据持久化(三)------ Redis的基础配置
【Docker 基础教程】容器数据持久化(三)------ Redis的基础配置
【Docker 基础教程】容器数据持久化(三)------ Redis的基础配置
|
关系型数据库 MySQL Shell
【Docker 基础教程】容器数据持久化(二) ------ Mysql的基础配置
【Docker 基础教程】容器数据持久化(二) ------ Mysql的基础配置
【Docker 基础教程】容器数据持久化(二) ------ Mysql的基础配置
|
存储 监控 Linux
Docker自测题(基础、容器、镜像等)(下)
什么是 Docker ? Go 语言开发,容器虚拟化技术,C/S 架构,具有隔离、快速、轻便的特点。
|
Shell Linux 应用服务中间件
Docker 基础 常用的其它命令
容器常用命令,后台启动容器,查看容器日志,查看容器进程,查看容器或镜像元数据,进入当前正在运行的容器,从容器内拷贝文件到主机,docker commit命令,将容器转为镜像等命令及参数详解
Docker 基础 常用的其它命令
|
Linux Shell Docker
Docker基础 容器基础命令操作与详解,学docker必须要会的容器命令
这篇文章写了我们学习docker必须要会的基础容器命令,文章会给出这些命令的详细解释和每个参数的使用方法,帮助大家更快的掌握这些命令
Docker基础 容器基础命令操作与详解,学docker必须要会的容器命令
|
关系型数据库 MySQL Go
Docker基础 常用命令、docker命令、镜像命令
Docker 常用命令、docker命令、镜像命令、docker帮助文档地址,镜像基础命令详解,参数解释,帮助方法
Docker基础 常用命令、docker命令、镜像命令
|
关系型数据库 MySQL Linux
docker基础 docker创建centos容器,然后在centos容器里下载MySQL并本地连接MySQL
docker基础,使用docker创建一个centos容器,并在该容器下载安装MySQL,并设定端口号,然后在本地连接MySQL
docker基础 docker创建centos容器,然后在centos容器里下载MySQL并本地连接MySQL
下一篇
无影云桌面