Docker
cgroup
namespace
IAAS
PAAS
SAAS
centos7 docker
centos6 docker-io
docker-ce 开源社区
docker-ee 收费版本
1.卸载原来的docker
yum remove docker
2.下载阿里云的docker仓库
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装
yum install docker-ce -y
类似于安装系统时候需要的iso镜像文件
启动之后的镜像
存放镜像
可以用公用的
可以有私有的
class myclass():
def __init__():
pass
m=myclass()
/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"
]
}
systemctl docker
8、启动并加入开机启动
$ sudo systemctl start docker
$ sudo systemctl enable docker
docker run hello-world
run 运行
hello-world 镜像名称
Hub.docker.com 里面可以搜索
docker search redis
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 run
-d 后台启动
docker run --name redis-test -d redis 起名字
-it
-i 交互式操作
t 终端
--rm 容器退出,并把容器删掉
docker run -it centos
exit
docker images
-q 只显示id
docker ps
-a 显示启动过的所有的容器
docker rmi 删除镜像
默认情况下不能删除启动过容器的镜像
-f 强制删掉
docker rm id|name 删除容器
默认不能删除启动中的容器
-f 强制删除
docker stop id号
ctrl+p,q
docker exec -it id|name bash
bash 是进入容器后执行的命令
docker logs id|name
-f 查看实时日志输出
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
docker tag 原来名称 新名称
如果不存在tag,则在原来的镜像基础上加上tag信息,如果存在原来的tag信息,则会复制一份
docker container prune
docker run centos bash -c "echo s21"
docker run centos echo s21
#在容器里面执行命令
docker run centos "while true;doecho s21;sleep 1;done"
#容器后台执行
docker run -d centos bash -c "while true;doecho s21;sleep 1;done"
#查看日志输出
docker logs -f id|name
-f 查看实时日志输出
将宿主机的文件挂载到容器里面
相当于文件夹共享
宿主机和容器内部的文件 实时同步
-v 宿主机目录:容器目录
docker run -it -v /opt/myetc:/etc centos bash
[root@localhost home]#docker run -it -v /ddd:/mydata centos bash
[root@d3d973d008d2 /]# ls
root@d3d973d008d2 /]# cd mydata/
[root@d3d973d008d2 mydata]# touch a.txt
[root@d3d973d008d2 mydata]# ll
total 0
-rw-r--r--. 1 root root 0 Aug 4 03:07 a.txt
[test@localhost ddd]$touch cc.txt
[test@localhost ddd]$ll
total 0
-rw-r--r--. 1 root root 0 Aug 4 11:07 a.txt
-rw-r--r--. 1 root root 0 Aug 4 11:08 bbb.txt
-rw-rw-r--. 1 test test 0 Aug 4 11:15 cc.txt
#容器内部实时
[root@d3d973d008d2 mydata]# ll
total 0
-rw-r--r--. 1 root root 0 Aug 4 03:07 a.txt
-rw-r--r--. 1 root root 0 Aug 4 03:08 bbb.txt
-rw-rw-r--. 1 1000 1000 0 Aug 4 03:15 cc.txt
[root@d3d973d008d2 mydata]#
docker run -d -P redis :端口是随机产生
docker run -d -p 宿主机上的端口:容器内的端口 redis :指定端口
docker run -d -p 2000:6379 redis
docker port cl6容器id:查看该容器的端口
sst tnlp
docker stats 容器id|name
docker info 查看docker信息
docker inspects 查看镜像信息
https://blog.csdn.net/wo18237095579/article/details/80540571
创建一个文件夹file
cd file
创建一个镜像配置文件dockerfile
vi dockerfile
FROM mycentos 指定基础镜像
RUN yum install -y wget 执行命令
RUN mkdir /mydata
COPY a.txt /mydata 将本地文件复制到镜像里面
ADD etc.tar.gz /mydata :将本地文件复制到进项内,如果是压缩包,则自动解压
WORKDIR /mydata :指定工作目录,exec 进入时候默认的目录
ENV "echo s2"设置变量
VOLUME 设置数据卷
EXPOSE 5900 设置端口
CMD ["nginx", "-g", "daemon off;"] 执行命令
copy 和add的区别
add 是自动解压
CMD只能有一个,RUN可以有多个
label maintainer=“[email protected]”
docker inspect …
docker login:登录docker自己的仓库(先注册docker hub)
docker push myredis:将自己的镜像上传的远端自己的仓库 默认上传到自己的仓库
docker pull registry
下载完之后我们通过该镜像启动一个容器
docker run -d -p 5000:5000 registry
默认情况下,会将仓库存放于容器内的/tmp/registry目录下,这样如果容器被删除,则存放于容器中的镜像也会丢失,所以我们一般情况下会指定本地一个目录挂载到容器内的var/lib/registry下,
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 查看结果
要修改配置文件
vim /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": [
"172.16.92.129:5000" 添加ip地址和端口
]
}
#重启docker
systemctl restart docker
#启动容器
docker start redis容器id号
docker tag redis 192.168.182.130:5000/redis
docker push 192.168.182.130:5000/redis
#拉取
docker pull 192.168.182.130:5000/redis
docker run -d -p 2001:3000 192.168.182.130:5000/redis
Eg:flask镜像
from flask import Flask
app=Flask(__name__)
@app.route("/")
def index():
return "hello"
if __name__=='__main__':
app.run(port=3000,host='0.0.0.0')
#Python3 main.py(保证有python解释器)
dockerfile文件方式
FROM python:3.6-alpine3.9 #基础镜像
RUN mkdir /data
ADD main.py /data #将本地文件复制到远端去
RUN pip install flask -i https://pypi.douban.com/simple
WORKDIR /data
CMD ["python","main.py"] #执行main.py脚本
>>> docker exec -it 1c2142df1cb2 /bin/sh
/data #
/data # ls
main.py
/data # ls -a
. .. main.py
/data #
docker tag flask 192.168.182.130:5000/flask:v1
docker push 192.168.182.130:5000/flask:v1
docker pull 192.168.182.130:5000/flask:v1
docker run -d 192.168.182.130:5000/flask:v1
安装:
pip install docker-compose
docker-compose
自动补全命令配置
curl ...
vi docker-compose.yml
Yml:配置文件 最好和dockerfile文件再同一个路径下,只要能保证yml能找到dockerfile文件就可
排版工具:swam,docker-compose
vi docker-compose.yml:
version: '3'
services:
web:
build: #类似docker build -t 镜像别名 -f dockerfile文件
context: . #指定当前目录
dockerfile: /flaskdemo/flaskconf #dockerfile文件
ports:
- "3000:3000"
redis:
image: "redis" #image 默认调用本地镜像 如果没有就会去库里面下载 并启动docker run
vi main.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("hits")
return "该页面被访问了{}次".format(count)
if __name__=="__main__":
app.run(port=3000,host="0.0.0.0")
vi flaskconf
FROM python:3.6-alpine3.9 #基础镜像
RUN mkdir /data
ADD main.py /data #将本地文件复制到远端去
RUN pip install flask redis -i https://pypi.douban.com/simple
WORKDIR /data
CMD ["python","main.py"] #执行main.py脚本
docker-compose build
[root@localhost flaskdemo]#docker-compose ps
Name Command State Ports
-----------------------------------------------------------------------------------
flaskdemo_redis_1 docker-entrypoint.sh redis ... Up 6379/tcp
flaskdemo_web_1 python main.py Up 0.0.0.0:3000->3000/tcp
images 查看镜像
rm 删除停止容器
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.6-alpine3.9 # 基础镜像
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
vi manage.py