详细笔记
什么是 Docker?
Docker 是一个开源的容器化平台,可以让开发者轻松地打包、部署和运行应用程序。
Docker 的主要优点包括:
- 轻量级:与虚拟机相比,Docker 容器占用的资源更少。
- 快速部署:Docker 可以快速地部署和运行应用程序。
- 跨平台:Docker 可以在不同的操作系统和云平台上运行。
Docker 基本概念
在学习 Docker 之前,需要了解一些基本概念。
镜像(Image)
Docker 镜像是一个只读的模板,可以用来创建容器。镜像可以包含操作系统、应用程序和配置文件等。
容器(Container)
Docker 容器是 Docker 镜像的一个可运行实例。容器可以被创建、启动、停止、删除等。
仓库(Repository)
Docker 仓库是用来存储 Docker 镜像的地方。仓库可以分为公共仓库和私有仓库。Docker 官方提供了一个公共仓库 Docker Hub。
Docker 命令
Docker 命令使用格式为 docker [command] [options]
。
镜像命令
搜索镜像
docker search [image name]
搜索 Docker 镜像。例如,搜索 Ubuntu 镜像:
docker search ubuntu
拉取镜像
docker pull [image name]:[tag]
拉取 Docker 镜像。例如,拉取 Ubuntu 18.04 镜像:
docker pull ubuntu:18.04
列出本地镜像
docker images
列出本地已经拉取的 Docker 镜像。
删除本地镜像
docker rmi [image name]:[tag]
删除本地的 Docker 镜像。例如,删除 Ubuntu 18.04 镜像:
docker rmi ubuntu:18.04
容器命令
创建容器
docker create [options] [image name] [command]
创建 Docker 容器。例如,创建一个基于 Ubuntu 18.04 镜像的容器:
docker create --name mycontainer ubuntu:18.04
启动容器
docker start [container name or ID]
启动 Docker 容器。例如,启动名为 mycontainer 的容器:
docker start mycontainer
停止容器
docker stop [container name or ID]
停止 Docker 容器。例如,停止名为 mycontainer 的容器:
docker stop mycontainer
列出运行中的容器
docker ps
列出正在运行的 Docker 容器。
列出所有容器
docker ps -a
列出所有 Docker 容器,包括已经停止的容器
删除容器
docker rm [container name or ID]
删除 Docker 容器。例如,删除名为 mycontainer 的容器:
docker rm mycontainer
进入容器
docker exec [options] [container name or ID] [command]
在运行中的 Docker 容器中执行命令。例如,进入名为 mycontainer 的容器并运行 Bash 终端:
docker exec -it mycontainer bash
Docker Compose
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。
安装 Docker Compose
使用以下命令安装 Docker Compose:
sudo curl -L "https://github.com/docker/compose/releases/download/[version]/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
创建 Docker Compose 文件
Docker Compose 文件使用 YAML 格式定义 Docker 应用程序的多个服务。
例如,以下 Docker Compose 文件定义了一个基于 MySQL 数据库和 Node.js 的 Web 应用程序:
yamlversion: "3"
services:
db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: example
MYSQL_DATABASE: myapp
volumes:
- db-data:/var/lib/mysql
app:
build: .
depends_on:
- db
environment:
DB_HOST: db
ports:
- "80:3000"
volumes:
db-data:
运行 Docker Compose 文件
使用以下命令运行 Docker Compose 文件:
docker-compose up
Docker Swarm
Docker Swarm 是 Docker 官方提供的用于容器编排和集群管理的工具。
创建 Docker Swarm 集群
使用以下命令创建 Docker Swarm 集群:
docker swarm init
在 Docker Swarm 集群中部署应用程序
使用以下命令在 Docker Swarm 集群中部署应用程序:
docker stack deploy [options] [stack name] -c [compose file]
例如,使用以下 Docker Compose 文件在 Docker Swarm 集群中部署应用程序:
yamlversion: "3"
services:
app:
build: .
environment:
DB_HOST: db
ports:
- "80:3000"
使用以下命令在 Docker Swarm 集群中部署该应用程序:
docker stack deploy --compose-file docker-compose.yml myapp
查看 Docker Swarm 集群状态
使用以下命令查看 Docker Swarm 集群的状态:
docker node ls
Docker 参数详解
Docker 命令中有很多参数,下面列举一些常用的参数及其详细说明。
镜像参数
–pull
每次启动容器时,Docker 都会检查本地是否有最新的镜像,如果没有,则会自动从 Docker Hub 下载最新的镜像。
–no-cache
构建镜像时禁止使用缓存。使用该参数可以确保构建出的镜像与代码库的最新版本保持同步。
–build-arg
定义构建镜像时使用的构建参数。例如,使用以下命令定义名为 myarg 的构建参数:
docker build --build-arg myarg=value .
在 Dockerfile 中,可以使用以下方式引用该构建参数:
ARG myarg
容器参数
-it
启动交互式终端。该参数等价于 -i -t。
–name
为容器指定名称。例如,使用以下命令启动名为 mycontainer 的容器:
docker run --name mycontainer myimage
–env
设置环境变量。例如,使用以下命令设置名为 myvar 的环境变量:
docker run --env myvar=value myimage
–volume
创建容器卷。例如,使用以下命令创建名为 myvolume 的容器卷:
docker run --volume myvolume:/data myimage
Docker Compose 参数
–scale
指定服务的副本数量。例如,使用以下命令指定名为 app 的服务的副本数量为 3:
docker-compose up --scale app=3
Docker Swarm 参数
–replicas
指定服务的副本数量。例如,使用以下命令指定名为 app 的服务的副本数量为 3:
docker service create --replicas 3 myimage
–constraint
指定服务的约束条件。例如,使用以下命令指定名为 app 的服务只能运行在名为 node1 的节点上:
docker service create --constraint node.hostname==node1 myimage
结语
本文介绍了 Docker 的基本概念和用法,并详细讲解了 Docker 的常用命令及其参数。希望本文能对读者学习和使用 Docker 提供一些帮助。
Dockerfile 指令详解
Dockerfile 是构建 Docker 镜像的脚本,包含了一系列指令,用于指定基础镜像、安装软件、拷贝文件等操作。下面是常用 Dockerfile 指令的详细说明。
FROM
指定基础镜像。例如,使用以下指令指定基础镜像为 Ubuntu 18.04:
FROM ubuntu:18.04
RUN
在镜像中执行命令。例如,使用以下指令在镜像中安装 Apache 服务器:
RUN apt-get update && apt-get install -y apache2
COPY
将本地文件拷贝到镜像中。例如,使用以下指令将当前目录下的 index.html 文件拷贝到镜像的 /var/www/html 目录中:
COPY index.html /var/www/html/
ADD
将本地文件或远程文件拷贝到镜像中。与 COPY 指令不同的是,ADD 指令还支持自动解压缩文件和从 URL 下载文件。例如,使用以下指令将当前目录下的 myapp.tar.gz 文件解压缩并拷贝到镜像的 /opt/myapp 目录中:
ADD myapp.tar.gz /opt/
CMD
指定容器启动时执行的命令。每个 Dockerfile 只能有一个 CMD 指令,如果有多个,则只有最后一个生效。例如,使用以下指令在容器启动时执行命令 /usr/sbin/apache2ctl -D FOREGROUND:
CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
ENTRYPOINT
指定容器启动时执行的命令,与 CMD 指令类似。不同的是,使用 ENTRYPOINT 指令可以将容器作为可执行文件运行。例如,使用以下指令将容器作为可执行文件运行:
ENTRYPOINT ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
EXPOSE
指定容器监听的端口号。该指令只是声明容器运行时需要监听哪些端口号,实际上并不会将端口暴露给宿主机或其他容器。例如,使用以下指令声明容器监听 80 和 443 端口:
EXPOSE 80 443
ENV
设置环境变量。例如,使用以下指令设置名为 MY_VAR 的环境变量:
ENV MY_VAR=value
WORKDIR
设置工作目录。例如,使用以下指令将工作目录设置为 /opt/myapp:
WORKDIR /opt/myapp
USER
指定容器运行时使用的用户。例如,使用以下指令指定容器运行时使用的用户为 nobody:
USER nobody
结语
本文介绍了 Docker 的基本概念和用法,并对 Dockerfile 的指令进行了详细的解释,包括 FROM、RUN、COPY、ADD、CMD、ENTRYPOINT、EXPOSE、ENV、WORKDIR 和 USER 等指令。这些指令可以帮助我们构建出定制化的 Docker 镜像,以满足不同的需求。
当然,这些指令只是 Dockerfile 中的一部分,Docker 还有很多其他的功能和特性,例如 Docker Compose、Docker Swarm、Docker Registry 等。如果您想深入了解 Docker,可以参考 Docker 的官方文档,这里提供了很多详细的教程和示例,可以帮助您更好地理解和使用 Docker。
总之,Docker 是一项非常有用的技术,可以帮助我们更方便地构建、打包、交付和运行应用程序。希望本文能够对您有所帮助,让您更好地掌握 Docker 的知识。