在Centos上安装Docker
卸载旧版本(如果有的话)
旧版本的 Docker 名称为docker
或docker-engine
。在尝试安装新版本之前卸载任何此类旧版本以及相关的依赖项
sudo yum remove docker
docker-client
docker-client-latest
docker-common
docker-latest
docker-latest-logrotate
docker-logrotate
docker-engine
安装方法
设置存储库
安装yum-utils
包(提供yum-config-manager
实用程序)并设置存储库。
sudo yum install -y yum-utils
sudo yum-config-manager
--add-repo
https://download.docker.com/linux/centos/docker-ce.repo
这里用的是国外的存储库地址,速度比较慢,可以更换为国内的镜像地址
yum-config-manager
--add-repo
安装 Docker 引擎
要安装最新版本,请运行:
代码语言:javascript复制sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
启动Docker
代码语言:javascript复制sudo systemctl start docker
通过运行hello world镜像验证是否安装成功
代码语言:javascript复制sudo docker run hello-world
卸载方法
卸载 Docker Engine、CLI、containerd 和 Docker Compose 包:
代码语言:javascript复制sudo yum remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
主机上的图像、容器、卷或自定义配置文件不会自动删除。删除所有镜像、容器和卷:
代码语言:javascript复制sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
Docker的常用命令
帮助命令
代码语言:javascript复制docker version # docker版本信息
docker info # 系统级别的信息,包括镜像和容器的数量
docker 命令 --help
镜像命令
代码语言:javascript复制docker images #列出所有的镜像
可选项:
--all , -a # 列出所有镜像
--quiet , -q # 只显示镜像的id
docker search 镜像名 #搜索镜像
可选项:
--filter=STARS=3000 # 搜素出来的镜像就是STARS大于3000的
docker pull 镜像名[:tag] #下载镜像 分层下载
#不写tag默认就是latest(最新版)
#例如下载5.7版本的mysql:docker pull mysql:5.7
docker rmi -f 镜像ID或者名称 #删除指定镜像
docker rmi -f 镜像ID 镜像ID #删除多个镜像
docker rmi $(docker images -aq) #删除全部容器
#commit镜像
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[TAG]
容器命令
代码语言:javascript复制docker run [可选参数] images
#参数说明
--name="Name" 容器名字 tomcat01 tomcat02 ,用来区分容器
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器端口 -p 8080:8080 还可以和主机映射起来
-p ip:主机端口:容器端口
-p 主机端口:容器端口(常用)
-p 容器端口
-P 随机指定端口
docker ps #列出运行中的镜像
可选项:
-a # 列出正在运行的容器包括历史容器
-n=? # 显示最近创建的容器
-q # 只显示当前容器的编号
#退出容器
exit # 直接退出容器并关闭
Ctrl P Q # 容器不关闭退出
#删除容器
docker rm -f 容器id # 删除指定容器
docker rm -f $(docker ps -aq) # 删除所有容器
docker ps -a -q|xargs docker rm -f # 删除所有的容器
#启动和停止容器的操作
docker start 容器id # 启动容器
docker restart 容器id # 重启容器
docker stop 容器id # 停止当前正在运行的容器
docker kill 容器id # 强制停止当前的容器
其他常用命令
后台启动容器
代码语言:javascript复制docker run -d 镜像名
例如:docker run -d centos
# 问题 docker ps, 发现centos停止了
# 常见的坑, docker 容器使用后台运行, 就必须要有一个前台进程,docker发现没有应用,就会自动停止
# nginx, 容器启动后,发现自己没有提供服务,就会立即停止,就是没有程序了
查看日志
代码语言:javascript复制docker logs -tf --tail 条数 容器id
查看容器中的进程信息
代码语言:javascript复制docker top 容器id
查看镜像的元数据
代码语言:javascript复制docker inspect 容器id
从容器中拷贝文件到主机
代码语言:javascript复制docker cp 容器id:容器内路径 目的地主机路径
使用Dockerfile
构建步骤
- 编写一个dockerFile文件
- docker build 构建成为一个镜像
- docker run 运行镜像
- docker push 发布镜像(DockerHub)
Dockerfile指令说明
代码语言:javascript复制FROM # 基础镜像,一切从这里开始构建
MAINTAINER # 镜像是谁写的, 姓名 邮箱
RUN # 镜像构建的时候需要运行的命令
ADD # 步骤, tomcat镜像, 这个tomcat压缩包!添加内容
WORKDIR # 镜像的工作目录
VOLUME # 挂载的目录
EXPOSE # 保留端口配置
CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效可被替代
ENTRYPOINT # 指定这个容器启动的时候要运行的命令, 可以追加命令
ONBUILD # 当构建一个被继承DockerFile 这个时候就会运行 ONBUILD 的指令,触发指令
COPY # 类似ADD, 将我们文件拷贝到镜像中
ENV # 构建的时候设置环境变量!
CMD 和ENTRYPOINT区别
代码语言:javascript复制CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效可被替代
ENTRYPOINT # 指定这个容器启动的时候要运行的命令, 可以追加命令
Docker Compose
简介
Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速的部署分布式应用。
描述
Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。从功能上看,跟 OpenStack 中的 Heat 十分类似。 其代码目前在 https://github.com/docker/compose 上开源。 Compose 定位是 「定义和运行多个 Docker 容器的应用(Defining and running multi-container Docker applications)」,其前身是开源项目 Fig。 我们知道使用一个 Dockerfile 模板文件,可以让用户很方便的定义一个单独的应用容 器。然而,在日常工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个 Web 项目, 除了 Web 服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。 Compose 恰好满足了这样的需求。它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定 义一组相关联的应用容器为一个项目(project)。 Compose 中有两个重要的概念: 服务 ( service ):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。 项目 ( project ):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。 Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。 Compose 项目由 Python 编写,实现上调用了 Docker 服务提供的 API 来对容器进行管理。因此,只要所操作的平台 支持 Docker API,就可以在其上利用 Compose 来进行编排管理。
Docker Compose使用
Docker-compose创建容器
通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目 (project)。
yml格式描述:
- yml文件以缩进代表层级关系
- 缩进不允许使用tab只能使用空格
- 空格的个数不重要,只要相同层级的元素左对齐即可(建议2个)
- 大小写敏感
- 数据格式为,名称:(空格)值
示例
用compose的方式管理一个Tomcat容器和MySQL:
代码语言:javascript复制version: '3.1'
services:
mysql: # 服务的名称
restart: always # 只要docker启动,容器会随着启动
image: daocloud.io/library/mysql:5.7.6 # 指定镜像路径信息(默认官方镜像地址)
container_name: mysql-3306 # 指定容器名称 --name
ports:
- 3306:3306 #指定端口号映射
environment:
MYSQL_ROOT_PASSWORD: root #指定MYSQL ROOT用户的密码
TZ: Asiz/Shanghai #指定时区
volumes:
- /opt/docker_mysql_tomcat/mysql/data:/var/lib/mysql #映射mysql的数据目录到宿主机,保存数据
- /opt/docker_mysql_tomcat/mysql/conf/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf
#把mysql的配置文件映射到容器的相应目录
tomcat:
restart: always
image: daocloud.io/library/tomcat:8.5.15-jre8
container_name: tomcat-8080
ports:
- 8080:8080
environment:
TZ: Asiz/Shanghai
volumes:
- /opt/docker_mysql_tomcat/tomcat/webapps:/usr/local/tomcat/webapps
- /opt/docker_mysql_tomcat/tomcat/logs:/usr/local/tomcat/logs
温馨提示:本文最后更新于2023-02-28
,若文件或内容有错误或已失效,请在下方留言。