卸载旧版
yum remove docker \
docker-client \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
配置Docker的yum库
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-re.repo
安装Docker
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
docker -v
docker images
启动和校验
# 启动Docker
systemctl start docker
# 停止Docker
systemctl stop docker
# 重启
systemctl restart docker
# 设置开机自启
systemctl enable docker
# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps
配置镜像加速
注册阿里云证号
开通镜像服务
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://....mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
镜像和容器
- 当我们利用Docker安装应用时,Docker会自动下载应用镜像(image)。镜像不仅包含应用本身,还包含应用运行所需要的环境、配置、系函数库。Docker会在运行镜像时创建一个隔离环境,称为容器。
- 镜像仓库:存储和管理镜像的平台,Docker官方维护了一个公共仓库:hub.docker.com
命令解读
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
mysql
- docker run: 创建并运行一个容器
- -d是让容器在后台运行
- --name mysql:给容器起个名字,必须唯一
- -p 3306:3306: 设置端口映射(宿主机:容器内端口)
- -e KEY=VALUE: 是设置环境变量
- mysql: 指定运行的镜像的名字
- 镜像命名规范
- 镜像名称一般分两部分组成:[repository]:[tag].
- 其中repository就是镜像名
- tag是镜像的版本
- 在没有指定tag时,默认是latest,代表最新版本的镜像
常见命令
例子-nginx
- 在DockerHub中搜索Nginx镜像,查看镜像的名称
- 拉取Nginx镜像
- 查看本地镜像列表
- 保存镜像
- docker save -o nginx.tar nginx:latest
- 删除镜像
- 读取镜像
- 创建并运行Ngingx容器
- docker run -d --name nginx -p 80:80 nginx
- 查看容器
- docker ps
- docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"
- docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}" -a
- 停止容器
- 再次启动容器
- 进入Nginx容器
- 删除容器
- docker rm nginx
- docker rm nginx -f
- 查看日志
- docker logs -f nginx bash
命令别名
- vi ~/.bashrc
- alias dps='docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"'
- alias dis='docker images'
- source ~/.bashrc
数据卷
- 数据卷(volume)是一个虚拟目录,是容器内容目录与宿主机目录之间映射的桥梁。
命令 |
说明 |
文档地址 |
docker volume create |
创建数据卷 |
|
docker volume ls |
查看所有数据卷 |
|
docker volume rm |
删除指定数据卷 |
|
docker volume inspect |
查看某个数据卷的详情 |
|
docker volume prune |
清除数据卷 |
|
自定义镜像
- 镜像就是包含了应用程序、程序运行的系统函数库、运行配置等文件的文件包。构建镜像的过程其实就是包上述文件打包的过程。
- 入口(Entrypoint): 镜像运行入口,一般是程序启动的脚本和参数
- 层(layer):添加安装包、依赖、配置等,每次操作都形成新的一层。
- 基础镜像(BaseImage): 应用依赖的函数系统库、环境、配置、文件等。
Dockerfile
- Dockerfile就是一个文本文件,其中包含一个一个的指令(Instruction),用指令来说明执行什么操作来构建镜像。将来Docker可以根据Dockerfile帮我们构建镜像。
指令 |
说明 |
示例 |
FROM |
指定基础镜像 |
FROM centos:6 |
ENV |
设置环境变量,可在后面指令使用 |
ENV key value |
COPY |
拷贝本地文件到镜像的指定目录 |
COPY ./jre11.tar.gz /tmp |
RUN |
执行Linux的shell命令,一般是安装过程的命令 |
RUN tar -zxvf /tmp/jre11.tar.gz && EXPORTS path=/tmp/jre11:$path |
EXPOSE |
指定容器运行时监听的端口,是给镜像使用者查看的 |
EXPOSE 8080 |
ENTRYPOINT |
镜像中应用的启动命令,容器运行时调用 |
ENTRYPOINT java -jar xx.jar |
自定义镜像
- 当编写好了Dockerfile,可以利用下面命令来构建镜像
- docker build -t myImage:1.0 .
- -t: 是给镜像起名,格式依然是repository:tag的格式,不指定tag时,默认为latest
- .: 是指Dockerfile所在目录,如果就在当前目录,则指定为"."
网络
- 加入自定义网络的容器才可以通过容器名互相访问,Docker的网络操作命令如下:
命令 |
说明 |
docker network create |
创建一个网络 |
docker network ls |
查看所有网络 |
docker network rm |
删除指定网络 |
docker network prune |
清除未使用的网络 |
docker network connect |
使指定容器连接加入某网络 |
docker network disconnect |
使指定容器连接离开某网络 |
docker network inspect |
查看网络详情信息 |
DockerCompose
- Docker Compose通过一个单独的docker-compose.yml模板文件(YAML格式)来定义一组相关联的应用容器,帮助我们实现多个相互关联的Docker容器的快速部署
- docker compose [OPTIONS] [COMMAND]
类型 |
参数或指令 |
说明 |
Options |
-f |
指定compose文件的路径和名称 |
-- |
-p |
指定project名称 |
Commands |
up |
创建并启动素有service容器 |
-- |
down |
停止并移除所有容器、网络 |
-- |
ps |
列出所有启动的容器 |
-- |
logs |
查看指定容器的日志 |
-- |
stop |
停止容器 |
-- |
start |
启动容器 |
-- |
restart |
重启容器 |
-- |
top |
查看运行的进程 |
-- |
exec |
在指定的运行中容器中执行命令 |