我是看狂神学的,感觉讲得不错,文章记录的知识都来自他的视频
https://www.bilibili.com/video/BV1og4y1q7M4?p=1
安装
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
尝试运行hello-world
docker run hello-world
帮助命令
docker version #显示docker版本信息
docker info #显示docker系统信息
docker 命令 --help #帮助命令
镜像命令
docker images #查看所有镜像
可选参数
-a #列出所有镜像
-q #只显示镜像id
docker search #搜索镜像
docker pull #下载镜像
docker rmi -f 容器id #删除镜像
docker rmi -f $(docker images -aq) #删除所有镜像
容器命令
docker run #新建容器并启动
例:
docker run -it nginx /bin/bash
可选参数
--name="" #容器名字
-d #后台运行
-it #交互运行
-p(小写) #指定端口 主机端口:容器端口
-P(大写) #随机指定端口
docker ps #列出所有运行的容器
可选参数
-a #列出所有运行的容器+历史运行容器
-n #列出最近运行的容器,如 -n=1
-q #列出运行容器编号
docker rm 容器id #删除容器,不能删除正在运行的容器,如果要强制删除 rm -f
docker rm -f $(docker ps -aq) #删除所有容器
exit #停止容器并退出
ctrl+p+q #容器不停止退出
docker start 容器id #启动容器
docker stop 容器id #停止容器
docker restart 容器id #重启容器
docker kill 容器id #强制停止当前容器
docker exec 容器id #进入容器后开启一个新的终端
docker attach 容器id #进入容器正在执行的终端
docker cp 容器id:容器内路径 目的主机路径 #从容器内拷贝文件到主机上
docker inspect 容器id #查看容器详细信息
commit命令
制作自己的镜像
docker commit -m="描述信息" -a="作者" 容器id 目标镜像名
例:
docker commit -m="test" -a="xiaolong" e41c5f808fbf testnginx
数据卷
就是挂载
-v
例:
docker run -it -v 主机目录:容器内目录
具名挂载和匿名挂载
匿名挂载
-v 容器内路径
docker run -d --name ngine01 -v /etc/nginx nginx
#查看所有volume的情况
docker volume ls
local 9f38292179faa178afcce54d80be99d4ddd68c91d2a68870bcece72d2b7ed061
具名挂载
docker run -d --name ngine01 -v juming-nginx:/etc/nginx nginx
docker volume ls
local juming-nginx
-v 容器内路径 #匿名挂载
-v 卷名:容器内路径 #具名挂载
Dockerfile
就是用来构建docker镜像的构建文件
#创建Dockerfile文件,名字最好就用Dockerfile
#文件内容:
FROM nginx
VOLUME ["volume01","volume02"]
CMD /bin/bash
#然后
docker build -f dockerfile1 -t xiaolongnginx . #注意这里最后面有一个点
#这时查看docker images就发现已经有这个镜像了
#注意这里volume01和volume02是匿名挂载,挂载在/var/lib/docker/volumes目录下
数据卷容器
#先启动一个容器
docker run -it --name docker01 xiaolongnginx /bin/bash
#再启动第二个容器
docker run -it --name docker02 --volumes-from docker01 xiaolongnginx /bin/bash
#这时两容器的volume01和volume02已经同步了
Dockerfile指令
FROM #基础镜像
MAINTAINER #镜像是谁写的,姓名+邮箱 xiaolong<xxx@qq.com>
EXPOSE #声明端口
WORKDIR #镜像的工作目录
VOLUME #挂载的目录
ADD #添加
COPY #拷贝,类似ADD
RUN #镜像构建时需要运行的命令
CMD #指定这个容器启动时要运行的命令,如果存在多个指令,仅最后一个生效。可被替代
ENTRYPOINT #类似CMD。可追加
ONBUILD #当构建一个被继承dockerfile时运行。是触发指令
ENV #构建的时候设置环境变量
#生成镜像
docker build -f dockerfile文件路径 -t 镜像名 .
Docker compose
#安装
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
#将可执行权限应用于二进制文件
sudo chmod +x /usr/local/bin/docker-compose
如何使用?看官方给的例子。
mkdir composetest
cd composetest
vim app.py
#app.py
import time
import redis
from flask import Flask
app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)
def get_hit_count():
retries = 5
while True:
try:
return cache.incr('hits')
except redis.exceptions.ConnectionError as exc:
if retries == 0:
raise exc
retries -= 1
time.sleep(0.5)
@app.route('/')
def hello():
count = get_hit_count()
return 'Hello World! I have been seen {} times.\n'.format(count)
vim requirements.txt
#requirements.txt
flask
redis
vim Dockerfile
#Dockerfile
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP app.py
ENV FLASK_RUN_HOST 0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
CMD ["flask", "run"]
vim docker-compose.yml
#docker-compose.yml
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
docker-compose up
Compose配置编写规则
version: "3.7" #指定版本
service:
web: #服务名称
build: . #指定为构建镜像上下文路径
image: redis #指定服务镜像
服务2:
image:
.....
#其他配置
volume:
network:
关于docker的东西暂时就记录到这了,命令看似很多,但其实自己多敲敲就会发现大部分都很好记。
其中最重要的就是Dockerfile和docker-compose.yml,还是得多看看别人或官方写好的,多看多试试自然也就会了。