Docker 基础操作
Docker 基础操作
目录
1 docker 操作镜像
1.1 docker 基础操作镜像
# 查找镜像
docker search [keywords]
# 查看镜像
docker images
# 显示镜像 ID
docker images -q
# 列出指定镜像
docker images
# 删除镜像
docker rmi [img-name|id]
# 删除全部镜像
docker rmi `docker images -q`
1.2 从容器创建一个新的镜像
docker commit -m "accentos" -a "ac" 32f4b11be651 accentos:v1
-a
提交的镜像作者;-c
使用Dockerfile指令来创建镜像;-m
提交时的说明文字;-p
在commit时,将容器暂停。
1.3 导出/入镜像
# 导出
docker save -o accentos.tar.gz accentos
docker save accentos > accentos.tar.gz
# 导入
docker load -i accentos.tar.gz
docker load < accentos.tar.gz
1.4 推送App镜像
# 登录
docker login -u YOUR-USER-NAME
# 使用 docker tag命令给 accentos 镜像打tag,记得前缀换成你自己的Docker ID。
docker tag accentos fcarey/accentos
# 上传,如果不想配置镜像的tagname,默认为: latest
docker push fcarey/accentos
1.5 本地仓库
docker run -p 5000:5000 -d -v /opt/data/registry:/var/lib/registry registry
docker tag accentos:v1.0 127.0.0.1:5000/accentos
docker push 127.0.0.1:5000/accentos
## 检查
curl 127.0.0.1:5000/v2/_catalog
{"repositories":["accentos"]}
2 docker 操作容器
2.1 启动容器
# 先查找本地是否存在镜像,不存在则下载镜像后再启动
docker run -d -p 80:80 docker/getting-started
# 也可以执行以下命令
docker run -dp 80:80 docker/getting-started
# 启动并进入容器
docker run -ti centos /bin/bash
-d
- 后台运行容器-p 80:80
- 映射主机80端口-P
- 将容器的端口暴露在宿主机的随机端口上docker/getting-started
- 要使用的镜像--name
- 指定名字-t
- 创建一个虚拟终端-i
- 将容器的标准输入保持打开- 退出 -
exit
、Ctrl + D
2.2 查看容器
docker ps
# 默认查询是运行中的容器
-a
查看所有的-q
只查看容器的id
2.3 容器执行命令
docker run centos /bin/echo "Hello World"
# 进入容器
docker exec -ti [container-name|id] /bin/bash
3 删除窗口
docker rm
- 默认只能删除未运行的容器
-f
- 强制删除
4 docker 状态查询
# 查看端口映射关系
docker port [container-name|id]
# 启动docker容器
docker start [container-name|id]
# 获取容器的运行状态
docker stats [container-name|id]
# 查看日志
docker logs [container-name|id]
# -f 实时输出
# 关闭docker容器
docker stop [container-name|id]
# 移除所有停止状态的容器
docker container prune
5 dockerFile
FROM accentos # 指定基础镜像
COPY epel.repo /etc/yum.repos.d/ # 复制文件
RUN yum install -y nginx # 运行命令
RUN mdkir /data/html
RUN echo 'acnginx' > /data/html/index.html
COPY nginx.conf /etc/nginx/nginx.conf #只复制
ADD # 复制并解压压缩包
ENV env1=envalue01 # 设置环境变量
ENV env2=envalue02
WORKDIR /data/html # 设置工作目录,exec进入之后直接进入的目录
EXPOSE 80 # 设置端口
VOLUME # 指定容器的目录
CMD /bin/bash -c systemctl start nginx # 运行命令
# RUN和CMD的区别
RUN可以有多个,CMD只能有一个,如果有多个到话,按最后一个算
6 docker 编排
6.1 app.py
from flask import Flask
from redis import Redis
app = Flask(__name__)
redis = Redis(host='redis', port=6379)
@app.route("/")
def index():
count = redis.incr("count")
return f"this websit has been visited {count} times"
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000)
6.2 appdf
FROM python:3.6-alpine
RUN mkdir /data
COPY app.py /data
WORKDIR /data
RUN pip install flask redis -i https://pypi.douban.com/simple
CMD python app.py
6.3 docker-compose.yml
version: '3.4'
services:
website:
build:
context: .
dockerfile: appdf
ports:
- "15000:5000"
redis:
image: 'redis'
6.4 启动app
docker-compose build
docker-compose up