随着容器化技术的兴起,Docker已成为现代软件开发和部署的核心工具之一。Docker提供了一种高效的方式来打包、分发和运行应用,无论是在本地开发环境还是在复杂的生产环境中。本文将介绍Docker的基本命令,帮助新用户快速掌握如何使用Docker来创建和管理容器。
参考
官方文档地址:https://www.docker.com/get-started
中文参考手册:https://docker_practice.gitee.io/zh-cn/
远程仓库:https://hub.docker.com/
安装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| 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
yum list docker-ce --showduplicates | sort -r
sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
|
生命周期理解
镜像
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| docker search [名称]
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
docker images [选项] [名称] -a:列出所有镜像(包含中间映像层) -q:只显示镜像id 名称:只搜索相关的images,相当于过滤条件 -f:其他过滤
docker system df
docker images -f dangling=true
docker image prune
docker rmi [选项] 镜像名:tag | 镜像id -f:强制删除
docker build [选项] PATH -f:指定Dockerfile路径 -t:指定镜像名及标签
docker load -i 名称.tar
docker save 镜像名 -o 名称.tar
docker push USERNAME/IMAGES_NAME
|
容器基础
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| docker run [选项] 镜像名:tag|镜像id -f:--name 起别名 -d:后台启动 -p:端口映射(【宿主机端口】:【容器内部端口】) -v [:ro]:数据卷映射(【宿主机路径】:【容器内路径】),ro容器只读不写,路径不存在则自动创建 --mount type=bind,source=宿主机路径(绝对),target=容器路径[,readonly]:挂载目录,路径不存在报错 --network [网桥名]:指定网桥
docker start 容器名或id docker stop 容器名或id docker restart 容器名或id docker kill 容器名或id
docker [container] rm [选项] 容器名或id docker container prune -f:强制
docker rm -f $(docker ps -aq)
docker log [选项] 容器名或id -f:实时展示 -tf:加入时间戳的实时展示 --tail:只显示尾部日志
docker top 容器名或id
docker inspect 容器名或id
docker exec [选项] 容器名或id bash -i:交互模式 -t:分配一个伪终端
docker cp 文件|目录 容器名或id:容器内资源路径 docker cp 容器名或id:容器内资源路径 主机目录
docker commit -m "描述信息" -a "作者信息" (容器id或者名称) 打包的镜像名称:标签
|
网络
| docker network ls
docker network create [选项] 网桥名称 -d:网络类型,有 bridge overlay
docker inspect 网桥名
docker network rm 网桥名称
|
Dockerfile
保留字 |
作用 |
FROM |
当前镜像是基于哪个镜像的 第一个指令必须是FROM |
MAINTAINER |
镜像维护者的姓名和邮箱地址 |
RUN |
构建镜像时需要运行的指令 |
EXPOSE |
当前容器对外暴露出的端口号 |
WORKDIR |
指定在创建容器后,终端默认登录进来的工作目录,一个落脚点 |
ENV |
用来在构建镜像过程中设置环境变量 |
ADD |
将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar包 |
COPY |
类似于ADD,拷贝文件和目录到镜像中 将从构建上下文目录中<原路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置 |
VOLUME |
用来定义容器运行时可以挂载到宿主机的目录,用于数据保存和持久化工作 |
CMD |
指定一个容器启动时要运行的命令 Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换 |
ENTRYPOINT |
指定一个容器启动时要运行的命令 ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及其参数 |
Docker Compose
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| version: '3' networks: blog_bridge: services: nginx: image: nginx:latest ports: - "80:8080" volumes: - /blog/nginx/html:/usr/share/nginx/html - /blog/nginx/nginx.conf:/etc/nginx/nginx.conf privileged: true environment: - SET_CONTAINER_TIMEZONE=true - CONTAINER_TIMEZONE=Asia/Shanghai mysql: image: mysql:5.7.27 ports: - "3306:3306" environment: - MYSQL_ROOT_PASSWORD=root - SET_CONTAINER_TIMEZONE=true - CONTAINER_TIMEZONE=Asia/Shanghai redis: image: redis:latest ports: - "6379:6379" volumes: - /blog/redis/redis.conf:/usr/local/etc/redis/redis.conf command: redis-server /usr/local/etc/redis/redis.conf privileged: true environment: - SET_CONTAINER_TIMEZONE=true - CONTAINER_TIMEZONE=Asia/Shanghai rabbitmq: image: daocloud.io/library/rabbitmq:3.8.7 restart: no ports: - "5672:5672" - "15672:15672" volumes: - /blog/data:/var/lib/rabbitmq/ environment: - SET_CONTAINER_TIMEZONE=true - CONTAINER_TIMEZONE=Asia/Shanghai blog: build: context: . dockerfile: Dockerfile ports: - "8888:8888" depends_on: - mysql - redis - rabbitmq environment: - SET_CONTAINER_TIMEZONE=true - CONTAINER_TIMEZONE=Asia/Shanghai
|
总结
通过本文的介绍,读者应能够理解Docker的核心功能和操作命令,包括如何安装Docker、管理容器的生命周期、操作镜像、配置网络,以及如何使用Dockerfile和Docker Compose来构建和编排多容器应用。掌握这些基础知识将使开发者能够更有效地利用Docker,提升应用的开发、测试和部署效率。