Docker
发表于更新于
字数总计:2.2k阅读时长:8分钟阅读量: 成都
知识DockerDocker
InsectMk是什么
Docker是一个流行的容器化平台,用于构建、部署和管理应用程序。它允许开发人员将应用程序及其所有依赖项打包到一个称为容器的独立单元中。这个容器可以在任何支持Docker的环境中运行,包括开发人员的个人计算机、测试环境和生产环境。
Docker利用操作系统级虚拟化技术(例如Linux容器)来提供轻量级、可移植和隔离的执行环境。使用Docker,开发人员可以创建一个独立的容器,其中包含应用程序的代码、运行时环境、系统工具和所有依赖项。这个容器可以在任何地方运行,而无需担心环境差异或依赖项冲突。
Docker具有许多优点,包括:
- 简化应用程序部署:使用Docker可以轻松地在不同环境中部署应用程序,而无需再次配置和安装依赖项。
- 快速启动和停止:容器可以在几秒钟内启动和停止,提高了开发和测试的效率。
- 资源隔离:每个容器拥有自己的文件系统、进程空间和网络接口,确保容器之间的应用程序隔离和安全性。
- 可扩展性:通过使用Docker容器,开发人员可以轻松地扩展应用程序,根据需要添加或删除容器实例。
- 生态系统支持:Docker拥有丰富的生态系统,提供了许多现成的容器镜像和工具,使开发人员能够快速构建和部署应用程序。
总之,Docker提供了一种简单、灵活和可移植的方式来封装和交付应用程序,帮助开发人员加快开发周期,提高应用程序的可移植性和可伸缩性。
如何安装
官方文档,Ubuntu安装
选择你对应的系统,查看安装步骤,这里演示Ubuntu系统
卸载Docker相关的包
1
| for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done
|
设置Docker存储库
允许apt通过HTTPS使用存储库
1 2
| sudo apt-get update sudo apt-get install ca-certificates curl gnupg
|
添加Docker官方GPG密钥(不知道啥意思)
1 2 3
| sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg
|
设置远程仓库
1 2 3 4
| echo \ "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
更新包索引
安装Docker引擎
安装最新版,包含Docker
、containerd
和Docker Compose
1
| sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
|
运行一个镜像测试是否安装成功,它将会在控制台打印一段话
1
| sudo docker run hello-world
|
常用命令
服务
1 2 3 4 5 6 7 8 9 10 11 12
| systemctl start docker
systemctl stop docker
systemctl status docker
systemctl restart docker
systemctl enable docker
systemctl disable docker
|
镜像
镜像标签,例如Hello-World:0.1,格式为[镜像名]:[标签],不带标签即为最新版本
1 2 3 4 5 6 7 8
| docker search <--limite [限制多少行]> <--filter ["筛选条件"]> [镜像名称]
docker images
docker rmi [镜像标签]/[镜像ID]
docker pull [镜像标签]
|
容器
相同指令的参数可以任意组合使用,这里只演示部分组合
创建容器
1 2 3 4 5 6 7 8 9 10
| docker run --name=[容器名称] [镜像标签]/[镜像ID]
docker run -d -p [本机端口]:[容器端口]/tcp [镜像名称]/[镜像ID]
docker run -it -p [本机端口]:[容器端口]/udp [镜像标签]/[镜像ID] bash
docker run -d -v [本机目录]:[容器目录]:rw --privileged=true [镜像标签]/[镜像ID]
docker run -it --privileged=ture --volumes-from [容器名称]/[容器ID] --name [容器名称] [镜像标签]/[镜像ID]
|
管理容器
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| docker start [容器名称]/[容器ID]
docker top [容器名称]/[容器ID]
docker kill [容器名称]/[容器ID]
docker rm [容器名称]/[容器ID]
docker commit [容器ID]/[镜像标签]
docker exec -it [容器名称]/[容器ID] bash
docker attach -it [容器名称]/[容器ID]
|
查看容器
1 2 3 4 5 6
| docker ps
docker ps -a
docker inspect [容器名称]/[容器ID]
|
安装软件
MySQL
挂载数据卷,暴露端口,指定root用户的密码,并在后台运行
1 2 3 4 5 6 7 8 9
| docker run -d \ -p 3306:3306 \ --privileged=true \ -v [本机目录]:/var/log/mysql \ -v [本机目录]:/var/lib/mysql \ -v [本机目录]:/etc/mysql/conf.d \ -e MYSQL_ROOT-PASSWORD=[root密码] \ --name [容器名] \ [mysql镜像标签]
|
Redis
挂载数据卷,暴露端口,启动服务时使用自定义的配置文件,并在后台运行
1 2 3 4 5 6 7 8
| docker run -d \ -p 6379:6379 \ --name [容器名] \ --privileged=true \ -v [本机目录].conf:/etc/redis/redis.conf \ -v [本机目录]:/data \ [redis镜像标签] \ redis-server /etc/redis/redis.conf
|
虚悬镜像
没有名字与标签的镜像,一般在构建镜像或者删除镜像操作不当时出现
1 2 3 4
| docker image ls -f dangling=true
docker image prune
|
Docker网络
目前了解到的Docker网络有(不懂网络…):
- 桥接网络
- 主机网络
- 空白网络
- 自定义网络
1 2 3 4 5 6 7 8 9 10
| docker network ls
docker network create [网络名称]
docker network rm [网络名称]/[网络ID]
docker network inspect [网络名称]
docker run --name [容器名] -d --network [网络名] -p [本机端口]:[容器端口] [镜像标签]/[镜像ID]
|
Dockerfile
DockerFile|菜鸟教程
用于制作Docker镜像的文件,基本步骤如下:
- 创建
Dockerfile
文件 - 编写
Dockerfile
的逻辑,并在当前目录下配置需要的文件或目录 - 在当前目录下执行
docker build -t [新镜像标签] .
,注意命令的最后有个.
,表示当前目录
扩展
Docker-Compose
官网文档,菜鸟教程
1 2 3 4 5 6 7
| sudo apt-get update sudo apt-get install docker-compose-plugin
docker compose version
sudo apt-get remove docker-compose-plugin
|
Compose常用命令
1 2 3 4 5 6 7 8 9 10 11 12 13
| docker-compose -h docker-compose up docker-compose up -d docker-compose down docker-compose exec [yml里面的服务id] docker-compose ps docker-compose top docker-compose logs [yml里面的服务id] docker-compose config docker-compose config -q docker-compose restart docker-compose start docker-compose stop
|
yaml配置实例
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
| version: '3'
services: microService: image: [镜像标签] container_name: [容器名] ports: - "6001:6001" volumes: - /app/microService:/data networks: - xxx depends_on: - redis - mysql redis: image: [镜像标签] ports: - "6379:6379" volumes: - /app/redis/redis.conf:/etc/redis/redis.conf - /app/redis/data:/data networks: - [网络名称] command: redis-server /etc/redis/redis.conf mysql: image: [镜像标签] environment: MYSQL_ROOT_PASSWORD: '[root密码]' MYSQL_ALLOW_EMPTY_PASSWORD: 'no' MYSQL_DATABASE: 'xxx' MYSQL_USER: 'xxx' MYSQL_PASSWORD: 'xxx' ports: - "3306:3306" volumes: - /app/mysql/db:/var/lib/mysql - /app/mysql/conf/my.cnf:/etc/my.cnf - /app/mysql/init:/docker-entrypoint-initdb.d networks: - [网络名称] command: --default-authentication-plugin-mysql_native_password
networks: [网络名称]:
|
Portainer
Docker轻量级图形化工具,web版,官网在这里。
Docker容器监控
CAdvisor+InfluxDB+Grafana,与Portainer相比,这个更为重量级。
参考文章
Docker 配置国内源加速(2023/05/14)
使用cAdvisor+Influxdb+Grafana监控系统