Docker
docker-ce 开源
docker-ee 收费
安装
卸载原来的docker
yum remove docker
下载阿里云的docker仓库
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装
yum install -y docker-ce
docker 加速器:文件存放路径
/etc/docker/daemon.json
{ "registry-mirrors":[ "https://1nj0zren.mirror.aliyuncs.com", "https://docker.mirrors.ustc.edu.cn", "http://f1361db2.m.daocloud.io", "https://registry.docker-cn.com" ] }
更新时间:2024-06-19:现在国内加速站相继停止(某些原因),所以上面的加速器失效,只能使用代理直接访问docker hub,操作如下:
配置docker代理:
mkdir -p /etc/systemd/system/docker.service.d cat <<EOF > /etc/systemd/system/docker.service.d/http-proxy.conf [Service] Environment="HTTP_PROXY=http://10.240.212.128:8000" # 此处修改为自己的代理 Environment="HTTPS_PROXY=http://10.240.212.128:8000" # 此处修改为自己的代理 EOF systemctl daemon-reload systemctl restart docker
启动docker
systemctl start docker
Docker简介
镜像
类似于安装系统时候需要的iso镜像文件
容器
启动之后的镜像
仓库
存放镜像
可以用公用的
可以有私有的
class myclass():
def __init__():
pass
m=myclass()
测试docker是否安装正常
# 语法:docker run 镜像名称
docker run hello-world # 启动hello-world镜像,如果没有则下载最新版本
run 运行
hello-world 镜像名称
Docker常用命令
搜索镜像
# 语法:docker search 镜像名称
docker search mysql # 搜索镜像名称
NAME(名字) DESCRIPTION(描述信息) STARS(点赞数) OFFICIAL(是否为官方) AUTOMATED
mysql MySQL is a widely used, open-source relation… 8499 [OK]
mariadb MariaDB is a community-developed fork of MyS… 2942 [OK]
下载镜像
# 语法:docker pull 镜像名称
docker pull redis # 下载redis镜像
运行容器
- 如果本地没有此镜像,则会取docker hub 下载
- 如果有的话,则直接根据参数运行
# 语法:docker run 镜像名称
-d # 后台启动
docker run --name redis-test -d redis # 起名字启动
-c # 启动并运行指定命令
docker run -d centos bash -c "while true;do echo helloworld;sleep 1;done" # 后台运行centos容器并没隔一秒输出helloworld。需要手动结束
-it # 进入镜像操作
i # 交互式操作
t # 终端
exit # 退出镜像
--rm # 容器退出,并把容器删掉
docker run -it --rm ubuntu bash
查看本地镜像
docker images
-q 只显示id
查看启动的容器
docker ps
-a 显示启动过的所有的容器
删除镜像
# 语法:docker rmi 镜像名称
docker rmi redis # 删除redis镜像
默认情况下不能删除启动过容器的镜像
-f 强制删掉
删除容器
# 语法:docker rm [镜像名称或id(id只用输入前四位即可)]
docker rm redis # 根据redis容器
默认不能删除启动中的容器
-f 强制删除
退出容器不关闭容器
ctrl+p,q
进入正在启动中的容器
# 语法:docker exec -it [镜像名或镜像id] bash
docker exec -it id|name bash # 根据id前三位或者名称进入容器
bash 是进入容器后执行的命令
查看容器的log日志
# 语法:docker logs [镜像名或镜像id]
docker logs id|name
-f 查看实时日志输出
导出镜像
# 语法:docker save -o [导出的文件名] [镜像名称]
docker save -o name imagename|id
docker save id|imagesname > centos.tar.gz
导入镜像
docker load -i centos.tar.gz
docker load < centos.tar.gz
提交(把容器导出为镜像)
docker commit -m "message" 运行中的容器id
# or 二选一即可
docker commit 运行中的容器id 要生成的镜像名
修改镜像名称
# 语法:docker tag [镜像id或名称] [新名称]
docker tag redis newredis # 修改redis镜像为newredis
如果不存在tag,则在原来的镜像基础上加上tag信息,如果存在原来的tag信息,则会复制一份
删除所有的关闭状态下的容器
docker container prune
数据卷
将宿主机的文件挂载到容器里面
-v 宿主机目录:容器目录
docker run -it -v /opt/myetc:/etc centos bash
将宿主机文件上传到容器中(在宿主机操作)
docker cp 宿主机文件目录 容器名:要上传到的容器目录
docker cp /opt/myetc centos:/etc/bin
端口映射
docker run -d -P redis # 端口是随机产生
docker run -d -p 宿主机上的端口:容器内的端口 redis # 指定端口
docker run --network=host redis # 占用主机的端口运行,可与主机其它程序互通
# --network 有多种用法(参数),自行百度
查看容器的资源占用率
# 语法:docker stats 容器id或name
docker stats redis # 查看redis容器状态
docker info # 查看docker信息
docker inspect 镜像名称 # 查看镜像信息
Dockerfile
# Dockerfile文件中要写的内容
FROM mycentos # 指定基础镜像
RUN yum install -y wget # 执行命令
RUN mkdir /mydata
COPY a.txt /mydata # 将本地文件复制到镜像里面
ADD etc.tar.gz /mydata # 将本地文件复制到进项内,如果是压缩包,则自动解压
WORKDIR /mydata # 指定工作目录,exec 进入时候默认的目录
ENV # 设置变量
VOLUME # 设置数据卷
EXPOSE 5900 # 设置端口
CMD ["nginx", "-g", "daemon off;"] # 执行命令
# 语法:docker build -t [要生成的镜像名称] [要生成的目录(目录中必须有Dockerfile文件,-f可指定文件)]
docker build -t mydocker . # 生成一个名为 mydocker 的镜像
docker build -t myflask -f flask. # 指定flask为dockerfile文件并生成一个名为 myflask 的镜像
# 说明:执行该语句会依次执行Dockerfile中的每行命令,最终完成镜像生成.可用 docker images 命令进行查看
copy 和add的区别
add 是自动解压
CMD只能有一个,RUN可以有多个
Docker本地私有仓库
docker run -d -p 5000:5000 -v /opt/register:/var/lib/registry registry # 创建本地仓库或启动本地仓库
docker tag redis 127.0.0.1:5000/redis # 修改名称
docker push 127.0.0.1:5000/redis # 上传到仓库
curl 127.0.0.1:5000/v2/_catalog # 查看结果
docker pull 127.0.0.1:5000/redis # 下载到仓库
要修改文件/etc/docker/daemon.json
{
# 配置加速
"registry-mirrors": [
"https://1nj0zren.mirror.aliyuncs.com",
"https://docker.mirrors.ustc.edu.cn",
"http://f1361db2.m.daocloud.io",
"https://registry.docker-cn.com"
],
# 本地仓库地址
"insecure-registries": [
"192.168.182.130:5000"
]
}
docker-compose
什么是docker-compose?其实就是编排工具中的一个
编排(排版)工具有:swam、ocker-compose
yml 可以用来做配置文件
其它配置文件有:cfg、ini、xml、json
后缀名: yml yaml
数据类型:string、int、列表: [ ] -、字典:key:value
使用YAML文件的有,YAML可直接转为python的字典:salt、ansible、docker-compose、k8s
安装
手工安装
# a.1. 可以通过https://github.com/docker/compose/releases 官方地址下载最新的docker-compose(如:sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose 或者下载后直接上传到服务器指定位置即可)
# a.2. 如果系统没有安装curl,可以采用wget来安装(如:sudo wget -O /usr/local/bin/docker-compose https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m`);要是用最新版本只需更换1.23.1版本号即可,其余勿更改!!!
# b. 增加执行权限 sudo chmod +x /usr/local/bin/docker-compose
# c、测试安装结果 docker-compose version
pip 安装
# 1. 通过pip -v检查pip 是否安装及版本 # 2. yum -y install epel-release 安装pip基础 # 3. yum install python-pip 安装pip的python 支持 # 4. pip install --upgrade pip 完成pip的安装 # 5. pip install docker-compose 来安装docker-compose
命令补全
curl -L https://raw.githubusercontent.com/docker/compose/1.8.0/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
使用
docker-compose.yml文件,进阶版
version: '3'
services:
web:
build:
context: . # 指定dockerfile文件目录在哪
dockerfile: dockerfile文件 # 指定目录中的dockerfile文件
ports:
- "3000:3000"
redis:
image: "redis" # 镜像,默认使用本地的,如果没有则下载
Dockerfile文件
from flask import Flask
from redis import Redis
app=Flask(__name__)
redis=Redis(host="redis",port=6379)
@app.route("/")
def index():
count= redis.incr("hits")
return "该页面被访问了{}次".format(count)
if __name__=="__main__":
app.run(port=3000,host="0.0.0.0")
Docker-compose常用命令
docker-compose build # 重新构建容器
docker-compose ps # 查看运行中的容器
docker-compose images # 查看镜像
docker-compose rm # 删除所有停止的容器
docker-compose.yml文件,初级版
version: '3' #版本
services:
web:
build: . # dockerfile文件叫Dockerfile
ports:
- "3000:3000"
redis:
image: "redis"
例子:
version: "3"
services:
redis:
image: redis:alpine
ports:
- "6379"
networks:
- frontend
db:
image: postgres:9.4
volumes:
- db-data:/var/lib/postgresql/data
networks:
- backend
vote:
image: dockersamples/examplevotingapp_vote:before
ports:
- 5000:80
networks:
- frontend
depends_on: # 先谁启动
- redis
- db
dockerfile 部署crm
FROM python:3.7-alpine3.10 # 基础镜像
RUN mkdir /data # 执行命令
COPY requirements.txt /data # 复制文件
COPY mycrm /data #复制目录的时候,,默认情况下是复制目录下的所有文件,如果要复制整个目录,则需要在后面加上目录名称
WORKDIR /data # 指定工作目录
RUN pip install -r requirements.txt -i https://pypi.douban.com/simple #安装python第三方的包
EXPOSE 8080 # 启动时候的端口,必须的
CMD python manage.py runserver 0.0.0.0:8080 #启动django
docker网络工具:calico(k8s也在使用的)
示例:使用dockerfile部署flask
第一步:编写flask项目,myflask.py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
return "Hello,This is my first dockerflask"
if __name__=="__main__":
app.run(host="0.0.0.0",port=9000)
第二步:编写flask文件
FROM python:3.7-alpine3.10
RUN mkdir /data
ADD myflask.py /data
RUN pip install flask -i https://pypi.douban.com/simple
WORKDIR /data
CMD ["python","myflask.py"]
第三步:生成镜像
docker build -t myflask -f dockerflask .
第四步:查看镜像是否生成并启动验证,启动成功则镜像生成完毕。
docker images
docker run -d -p 3000:9000 myflask
如果创建了本地仓库,则可上传至本地仓库,也就是把上面的本地私有仓库流程又走了一遍,改个镜像名称即可。我这里就不说啦。