Docker入门教程
安装Docker
参考链接:https://docs.docker.com/engine/install/centos/
卸载旧版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
设置仓库
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
安装
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
启动Docker
sudo systemctl start docker
Docker安装完毕后,我们首先启动守护程序。
检查 Docker 是否正在运行:
systemctl status docker
未启动的话先启动docker:
systemctl start docker
设置开机自启动:
systemctl enable docker
帮助命令
docker version # 显示docker的版本信息
docker info # 显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help # 帮助命令
文档地址 https://docs.docker.com/engine/reference/commandline/docker/
镜像使用
拉取镜像
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
example:
docker pull osrf/ros:humble-desktop-full
列出镜像
docker images
各个选项说明:
REPOSITORY:表示镜像的仓库源
TAG:镜像的标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
查找镜像
docker search
删除本地镜像
docker rmi [选项] <镜像1> [<镜像2> ...]
docker image rm [选项] <镜像1> [<镜像2> ...]
容器使用
启动容器
从docker镜像启动一个容器的语法如下
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
option | 作用 |
---|---|
-i | 交互式操作 |
-t | 终端 |
-d | 守护进程,后台运行该容器 |
-v | 目录映射,格式:宿主机目录:容器目录 |
-p | 指定端口映射,格式:主机(宿主)端口:容器端口 |
-P | 随机端口映射,容器内部端口随机映射到主机的端口 |
--name docker-name | 容器名字docker-name |
-m, --memory bytes | 设置容器使用内存最大值 |
-h, --hostname string | 指定容器的 hostname |
--dns 8.8.8.8 | 指定容器 dns 服务器8.8.8.8 |
-e JAVA_HOME="路径" | 设置环境变量,如JAVA_HOME |
--rm | 容器退出时,删除容器及容器目录 |
example:
docker run -it -v ~/workspace:/home/sunwenqi/workspace osrf/ros:humble-desktop-full /bin/bash
/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash
退出容器
exit
查看运行中running状态的容器
docker ps
查看所有状态的容器(包含running、paused、stopped)
docker ps -a
启动已停止运行的容器
查看所有容器:
docker ps -a
使用 docker start 启动一个已停止的容器:
docker start <容器名/容器ID>
example:
docker start b7d2a542578a
停止一个容器
停止容器的命令如下:
docker stop <容器名/容器ID>
停止的容器可以通过 docker restart 重启:
docker restart <容器名/容器ID>
进入容器
在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:
docker attach <容器名/容器ID>
docker exec <容器名/容器ID>
推荐使用 docker exec 命令,因为此命令会退出容器终端,但不会导致容器的停止
example:
attach 命令
docker attach b7d2a542578a
exec 命令
docker exec -it b7d2a542578a /bin/bash
删除容器
docker rm <容器ID>
清理掉所有处于终止状态的容器
docker container prune
从容器内拷贝文件到主机上
docker cp 容器id:容器内路径 目的地主机路径
Dockerfile
Dockerfile是用来构建Docker镜像的文件,可以理解为命令参数脚本
规则
每个指令都必须是大写字母。
按照从上到下顺序执行。
# 表示注释。
每一条指令都会创建一个新的镜像层。
解释
FROM:基础镜像,比如 centos。
MAINTAINER:镜像是谁写的。建议以此格式:姓名<邮箱>。
RUN:镜像构建时需要运行的命令。
ADD:添加,比如添加一个 tomcat 压缩包。
WORKDIR:镜像的工作目录。
VOLUME:挂载的目录。
EXPOSE:指定暴露端口,跟 -p 一个道理。
RUN:最终要运行的。
CMD:指定这个容器启动的时候要运行的命令,只有最后一个会生效,而且可被替代。
ENTRYPOINT:指定这个容器启动的时候要运行的命令,可以追加命令。
ONBUILD:当构建一个被继承Dockerfile 这个时候运行ONBUILD指定,触发指令。
COPY:将文件拷贝到镜像中。
ENV:构建的时候设置环境变量。