抽空学习了下docker,阅读了站内的一些文章:Docker 入门教程-阮一峰 - 掘金 (juejin.cn)
赶紧收藏!我直接上瘾!百万人都在学的Docker - 掘金 (juejin.cn)
在这里整理一些简单的入门知识。
顺便推荐一个学习课程:Docker Training Course for the Absolute Beginner | KodeKloud,本文的图片便来源于该课程。
1 基本指令
| command | 选项 | 作用 | 备注 |
|---|---|---|---|
| docker run ID/Name | ngnix镜像不存在会进行拉取 | 镜像不存在则会自动拉取 | |
| 启动后的指令 | 启动容器并执行指令 | docker run ubuntu sleep 5 | |
| -d | 在后台运行容器,并且打印容器id | ||
| -i | 以交互模式运行容器 | it通常一起使用,-i是主体 | |
| -t | 为容器重新分配一个伪输入终端 | docker run centos -it bash | |
| docker attach ID/Name | 进入容器正在执行的终端 | ||
| docker ps | 列举所有正在运行的容器 | ||
| -q | 列举所有容器的id | ||
| -a | 包括已停止的容器 | ||
| docker stop ID/Name | 停止容器 | ||
| docker rm ID/Name | 删除容器 | ||
| docker images | 查看镜像 | ||
| -q | 查看镜像id | ||
| docker rmi ID/Name | 删除镜像 | ||
| docker pull images | 拉取镜像 | ||
| docker exec ID/Name command | 在容器中执行指令 | docker exec centos cat /etc/hosts | |
| docker login | 登录docker账户 |
2 Docker Run 命令
# 1 版本选择:":" + TAG
docker run ubuntu:22.04
# 2 端口映射
docker run -p 5000:8080 -it -d c6e
# 将容器内的8080端口映射到宿主机的5000端口
# 可以运行多个不同端口映射的容器
# 3 文件夹映射
docker run -v dockerFile:/var/lib centos
# 4 查看容器详细信息
docker inspect ID/Name
# 5 查看日志信息
docker logs
# 6 赋予用户权限
docker run -u root ID/Name
# 7 给容器取名
docker run --name=dockerName ...
3 Docker Images 编写和运行
3.1 Dockerfile的编写
# An example
FROM Ubuntu
RUN apt-get update
RUN apt-get install python
RUN pip install flask
RUN pip install flask-mysql
COPY · /opt/source-code # 将源码打包进image
ENTRYPOINT FLASK_APP=/opt/source-code/app.py flask run # 容器启动后执行的指令
用dockerfile build image
docker build Dockerfile -t mmumshad/my-custum-app
# mmumshad表示account, my-custum-app表示name
上传docker镜像
docker push mmumshad/my-custum-app
为容器设置环境变量
docker run -e APP_COLOR=green simple-webapp-color
3.2 Dockerfile中设置运行命令
3.2.1 CMD
FROM ubuntu
CMD sleep 5
也可以使用json格式
# 格式 CMD ["command", "param"]
FROM ubuntu
CMD ["sleep", "5"]
命令行:
docker run ubuntu-sleeper sleep 10
# Overide the Dockerfile
3.2.2 ENTRYPONIT
FROM ubuntu
ENTRYPOINT ["sleep"]
命令行:
docker run ubuntu-sleeper 10
# get appended
3.2.3 同时使用CMD和ENTRYPONIT
FROM ubuntu
ENTRYPOINT ["sleep"]
CMD ["5"]
命令行:
docker run ubuntu-sleeper
# 覆盖ENTRYPONIT
docker run --entrypoint sleep2.0 ubuntu-sleeper
4 Docker compose
目的:创建配置文件,运行配置多个容器
4.1 补充知识——容器链接
docker run -d --name=vote -p 5000:80 --link redis:redis voting-app
# ?第一个redis表示容器名,第二个redis表示镜像名
4.2 Docker compose version 1
docker-compose.yml案例
redis:
image: redis
db:
image: postgres:9.4
vote:
image: voting-app
ports:
- 5000:80
links:
- redis
result:
image: result-app
ports:
-5001:80
links:
- db
worker:
image: worker
links:
- redis
- db
运行docker-compose.yml
docker-compose up
运行该yml文件等效于shell中执行如下指令
docker run -d --name=redis redis
docker run -d --name=db postgres: 9.4
docker run -d --name=vote -p 5000:80 --link redis:redis voting-app
docker run -d --name=result -p 5001:80 --link db:db result-app
docker run -d --name=worker --link db:db --link redis:redis worker
若使用的不是Dokcer Hub上的镜像,可以在yml指示自己创建容器的方式
redis:
image: redis
db:
image: postgres:9.4
vote:
build: ./note # 包括源码与Dockerfile
ports:
- 5000:80
links:
- redis
result:
build: ./result
ports:
-5001:80
links:
- db
worker:
build: ./worker
links:
- redis
- db
4.3 不同版本的Docker compose
4.3.1 version 1
redis:
image: redis
db:
image: postgres: 9.4
vote:
image : voting-app
ports:
一5000:80
links:
-redis
4.3.2 version 2
version: 2
services:
redis:
image: redis
db:
image: postgres: 9.4
vote:
image: voting-app
ports:
- 5000:80
depends_ on :
- redis
4.3.3 version 3
V2不需要links 可以用depends_on指出依赖的容器
version: 3
services:
redis:
image: redis
db:
image: postgres: 9.4
vote:
image: voting-app
ports:
- 5000:80
4.3.4 network
version: 2
services:
redis:
image: redis
networks:
- back-end
db:
image: postgres:9.4
networks:
- back-end
vote:
image: voting-app
networks:
- front-end
- back-end
result:
image: result
networks:
- front-end
- back-end
networks:
front-end:
back-end:
容器网络图示
4.4 运行docker compose
命令行运行
docker-compose up
4 Docker Engine
4.1 Docker组成
| 组成 | 作用 |
|---|---|
| Docker DeamOn | 管理镜像、容器、网络等 |
| REST API | 与DeamOn交互的接口 |
| Docker CLI | 输入命令 |
Docker engine 的层级结构:
Docker engine 交互逻辑:
Docker engine 命名空间:
4.2 限制容器使用系统资源
docker run --cpus=.5 --memory=100m ubuntu
# 限制CPU使用率不超过50%, 内存使用不超过100M