CC BY 4.0 (除特别声明或转载文章外)
如果这篇博客帮助到你,可以请我喝一杯咖啡~
Docker 从零开始入门到入土
什么是容器
- 一种打包技术,将软件运行环境和所依赖的所有东西打包在一起,可以实现软件的跨平台
- 便携,容易分享与移动
- 使得更高效的开发与部署
容器在哪里?
- 容器仓库
- 私有仓库
- Docker的公共仓库 在 dockerhub
容器怎么提高开发效率
之前 | 容器后 |
---|---|
在每个操作系统安装步骤不同 | 拥有独立环境直接打包所有配置 |
不知道那一步错了 | 一键安装应用可以同时跑两个不同版本 |
需要服务器设置并且要说明书 | 开发和运营共同打包到一个容器,服务器端不需要环境设置除了 Docker Runtime |
container
- 镜像层
- 大部分是基于 linux 的镜像 ,因为很小
- 最火的是应用镜像
instructors
docker ps
docker run xxx:xx.xx
镜像与容器的区别
docker 和 虚拟机区别
- Docker 在操作系统级别
- 不同等级的抽象
- 为什么基于 Linux 的 docker 容器不能运行在 windows 上
安装 Docker
Docker Toolbox 针对老式操作系统
两个版本 CE or EE
个人社区版本足够
MAC
至少有 4G RAM
WINDOWS
确认可虚拟化
Linux
要64位 ubuntu 支持 x86_64 armhf s390x ppc64le
- 设置仓库
- 手动安装包
看官网命令
sudo apt-get update
sudo apt-get install docker-ce
sudo docker run hello-world
Docker Toolbox
官网直接下载对应版本
基本命令
镜像与容器的区别
docker ps
列出运行的容器
docker stop containerID
停止容器
docker start containerID
启动容器
docker run -d xxx.xxx
拉去镜像并创建容器
容器端口与主机端口
- 多个容器可以运行在你的主机
- 你的电脑只有部分端口可以使用
- 主机端口冲突时
docker run -p 80:8080 xxx.xxx
debugging docker
docker logs containerID
docker exec -it containerID bash
demo
workflow with docker(工作流)
这里以开发 JS APP 为例 JS + MongoDB
开发
JS + nodejs SD
docker pull mongo
docker pull mongo-express
docker network ls
docker network create mongo-net
docker run -p 27017:27017 --name mongodb -d mongo -e MONGODB_INITDB_ROOT_USER=admin -e MONGODB_INITDB_ROOT_PASSWORD=password --net mongo-net
docker logs
docker run -d \ -p 8081:8081\ -e ME_CONFIG_MONGODB_ADMINUSERNAME=admin\ -e ME_CONFIG_MONGODB_ADMINPASSWORD=password\ --name mongo-express\ --net mongo-net\ -e ME_CONFIG_MONGODB_SERVER=mongodb\ mongo-express
docker logs XXXXX
docker compose
创建 docker compose 文件
docker-compose -f mongo.yaml up
dockerfile
Build image from dockerfile
doceker build -t my-app:1.0 .
docker images
docker rm DockerconatinerID
docker rmi DockerimageID
docker exec -it DockerconatinerID /bin/bash
docer exec -it DockerconatinerID /bin/sh
终结容器,有时候 bash 不管用
AWS
docker login
- 前置准备 1) 安装 AWS CLi 2) 证书设置
- 登录
- build image
- tag image
- push image
Image naming in Docker registries
registryDomain/imageName:tag 基本流程看 aws 官网
docker tag my-app:1.0 123456789012.dkr.ecr.us-east-1
docker push 123456789012.dkr.ecr.us-east-1
部署
Docker Volume
3 Volume Types
- Host volumes
你已经决定了在主机文件系统中的哪个位置进行引用。
- anonymous volumes
- named volumes
demo
docker-compose -f docker-compose.yaml
docker-compose -f docker-compose.yaml dowm
docker-compsae -f docker-compose.yaml up
CPU
Docker 限制容器 CPU 使用率的方法主要有以下三种:
- 相对份额限制(CPU Shares): 通过设置 –cpus 选项,可以为容器分配一个相对的 CPU 份额。例如,如果您有一个 4 核 CPU 的主机,并为某个容器分配了 2 个 CPU 份额,那么该容器将最多占用主机 CPU 的 50%。设置相对份额限制的命令如下:
docker run --cpus 2 -it --name my-container my-image
- 绝对使用限制(CPU Usage): 通过设置 –cpu-timeout 选项,可以限制容器使用的 CPU 时间片。例如,如果您设置 –cpu-timeout 为 30 秒,则容器最多只能占用 30 秒的 CPU 时间。设置绝对使用限制的命令如下:
docker run --cpu-timeout 30 -it --name my-container my-image
- CPU 核心控制(CPU Cores): 通过设置 –cpu 选项,可以限制容器使用的 CPU 核心数。例如,如果您有一个 4 核 CPU 的主机,并为某个容器分配了 2 个 CPU 核心,那么该容器将最多占用主机 CPU 的 50%。设置 CPU 核心控制的命令如下:
docker run --cpu 2 -it --name my-container my-image
需要注意的是,以上三种限制方法可以同时使用,以实现更精确的 CPU 资源控制。
GPU
Docker 限制容器 GPU 使用率的方法主要有以下两种:
- 相对份额限制(GPU Shares): 通过设置 –gpus 选项,可以为容器分配一个相对的 GPU 份额。例如,如果您有一个具有 8 个 GPU 核心的主机,并为某个容器分配了 2 个 GPU 份额,那么该容器将最多占用主机 GPU 的 25%。设置相对份额限制的命令如下:
docker run --gpus 2 -it --name my-container my-image
- 绝对使用限制(GPU Usage): 通过设置 –gpu-timeout 选项,可以限制容器使用的 GPU 时间片。例如,如果您设置 –gpu-timeout 为 30 秒,则容器最多只能占用 30 秒的 GPU 时间。设置绝对使用限制的命令如下:
docker run --gpu-timeout 30 -it --name my-container my-image
需要注意的是,当主机有多个 GPU 时,Docker 会自动为容器分配一个默认的 GPU。如果您希望使用特定的 GPU,可以使用 –gpu 选项指定。例如,要使用主机上的第二个 GPU,可以这样设置:
docker run --gpu 2 -it --name my-container my-image
此外,如果您不希望限制容器的 GPU 使用,可以不设置 –gpus 和 –gpu-timeout 选项。这样,Docker 会允许容器尽可能地使用 GPU。
内存
Docker 限制容器内存使用率的方法主要有以下两种:
- 限制内存总量:通过设置 –memory 选项,可以为容器分配一个有限的内存空间。例如,如果您设置 –memory 为 1G,则容器最多只能占用 1GB 的内存。设置内存总量限制的命令如下:
docker run --memory 1g -it --name my-container my-image
- 限制内存使用率:通过设置 –memory-swap 选项,可以限制容器内存使用率。例如,如果您设置 –memory-swap 为 1g,则容器最多只能占用 1GB 的内存,无论实际内存需求如何。设置内存使用率限制的命令如下:
docker run --memory-swap 1g -it --name my-container my-image
需要注意的是,当您设置 –memory-swap 时,Docker 会自动为容器分配一个与 –memory 值相等的内存空间。如果您希望容器使用更多的内存,可以不设置 –memory-swap 选项。 此外,如果您希望同时限制容器的内存和 CPU 使用率,可以使用以下命令:
docker run --memory 1g --cpu-timeout 30s -it --name my-container my-image
在这个例子中,容器将最多占用 1GB 的内存和 30 秒的 CPU 时间片。