Docker的安装、常用命令介绍及Docker Compose的简单使用

2023-03-21 21:26:09 浏览数 (1)

在Centos上安装Docker

卸载旧版本(如果有的话)

旧版本的 Docker 名称为dockerdocker-engine。在尝试安装新版本之前卸载任何此类旧版本以及相关的依赖项

代码语言:javascript复制
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 实用程序)并设置存储库。

代码语言:javascript复制
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,若文件或内容有错误或已失效,请在下方留言。

0 人点赞