Day 63 Docker 私有仓库
私有仓库
docker pull registry
私有仓库会被创建在容器的/var/lib/registry下,因此通过-v参数将镜像文件存储到本地的/opt/data/registry下 端口映射容器中的5000端口到宿主机的5000端口
docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry
/opt/data/registry 表示要保存到你宿主机下的路径
/var/lib/registry 表示你容器里存放镜像的路径
docker ps
telnet 192.168.119.10 5000
telnet 192.168.119.10 5000
docker images
[root@master /]# cat /etc/docker/daemon.json
{
"registry-mirrors": ["http://95822026.m.daocloud.io"],
"insecure-registries":["192.168.119.10:5000"]
}

写入到docker服务中,写入到[Service]配置块中,加载此配置文件
vim /lib/systemd/system/docker.service
添加一行配置
EnvironmentFile=-/etc/docker/daemon.json

docker systemctl daemon-reload
docker systemctl restart docker
docker ps -a
docker start 容器id
docker push 192.168.119.10:5000/hello-world

12.由于docker registry没有web节目,但是提供了API数据
要想查看已经上传的镜像, 通过以下链接访问即可查看
官网教程:https://docs.docker.com/registry/spec/api/#listing-repositories
curl http://192.168.119.10:5000/v2/_catalog 或者浏览器访问http://192.168.1.90:5000/v2/_catalog
13.删除本地镜像,从私有仓库中下载
docker rmi -f docker images -aq docker pull 192.168.119.10:5000/hello-world
1. FROM参数(指定基础镜像) FROM scratch # 制作base image基础镜像,尽量使用官方的image作为base image FROM centos # 以centos为基础镜像,进行二次构建镜像 FROM ubuntu:14.04 # 带有tag的base image 2. LABEL参数(标签, 定义作者信息) LABEL version=“1.0” # 容器元信息,帮助信息,Metadata,类似于代码注释 LABEL maintainer=“lxh661314@163.com" 3. RUN参数(是一个万能指令,执行命令) #对于复杂的RUN命令,避免无用的分层,多条命令用反斜线换行,合成一条命令! RUN yum update && yum install -y vim \ Python-dev # 反斜线换行 RUN /bin/bash -c "source $HOME/.bashrc;echo $HOME” 4. WORKDIR参数(相当于linux的cd命令) WORKDIR /root # 相当于linux的cd命令,改变目录,尽量使用绝对路径!!!不要用RUN cd WORKDIR /test # 如果没有就自动创建 WORKDIR demo # 再进入demo文件夹 RUN pwd # 打印结果应该是/test/demo 5. ADD参数(把宿主机的一个文件,添加到容器空间内) ADD /opt/django/manage.py /opt/ # 把宿主机的/opt/django/manage.py放到容器空间内的/opt/目录下 ADD /opt/python3.6.tar.gz /opt/ # ADD的解压文件作用,将宿主机的/opt/下的python3.6.tar.gz解压到容器内的/opt/目录下 ADD and COPY ADD hello / #把本地文件添加到镜像中,吧本地的hello可执行文件拷贝到镜像的/目录 ADD test.tar.gz / #添加到根目录并解压 WORKDIR /root ADD hello test/ # 进入/root/ 添加hello可执行命令到test目录下,也就是/root/test/hello 一个绝对路径 COPY hello test/ # 等同于上述ADD效果 6. COPY参数(拷贝指令) # 将宿主机的文件, 拷贝到容器内,但是没有解压缩的命令,尽量使用COPY,不要使用ADD COPY filename /opt/ ADD与COPY - 优先使用COPY命令 -ADD除了COPY功能还有解压功能 添加远程文件/目录使用curl或wget 7. ENV参数(docker的环境参数指令) ENV # 环境变量,尽可能使用ENV增加可维护性 ENV MYSQL_VERSION 5.6 # 设置一个mysql常量,这个${MYSQL_VERSION}类似于全局常量 RUN yum install -y mysql-server=“${MYSQL_VERSION}” # 如果版本号有变更,则只需要改这个常量就可以了
使用Dockerfile封装Django镜像
部署过程
REPOSITORY TAG IMAGE ID CREATED SIZE centos latest 9f38484d220f 3 weeks ago 202MB
2.在/opt下建立了docker目录,下载一个django-2.1.7的源码包,
wget https://media.djangoproject.com/releases/2.1/Django-2.1.7.tar.gz wget -O epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
touch Dockerfile和run.sh,其中run.sh是用来执行Django的bash脚本,Dockerfile即为自动build python的文件,此文中的核心也是Dockerfile.
下载阿里云扩展源epel.repo文件,也放在此目录
3.编写Dockefile(vim Dockefile)
FROM centos MAINTAINER TigerLee ADD epel.repo /etc/yum.repos.d # 将当前目录的epel.repo文件拷贝到容器的/etc/yum.repos.d目录下 RUN yum update -y # 运行命令 RUN yum install -y python36 RUN yum install -y python36-pip RUN pip3 install setuptools ADD Django-2.1.7.tar.gz /opt/ WORKDIR /opt/ # 进入/opt目录 RUN mv Django-2.1.7 django # 运行命令mv WORKDIR /opt/django # 进入/opt/django目录 RUN python3 setup.py install WORKDIR /opt RUN django-admin.py startproject qishi3dj ADD run.sh /opt/qishi3dj/run.sh WORKDIR /opt/qishi3dj RUN chmod 777 run.sh EXPOSE 9090 # 声明容器端口 CMD ["/bin/sh","run.sh"] # 容器启动时默认执行的命令
4.编写run.sh(vim run.sh)
python3 manage.py runserver 0.0.0.0:8000
开始构建
1.在放有Dockefile文件的目录下(/opt/docker)创建镜像:
docker build -t addit/django-217 . # 注意这个点
构建完成后 docker images

2.此时后台启动镜像,并把8000端口映射出来
[root@tiger docker]# docker run -d -p 9090:8000 tiger/django-217 # 宿主机的9090端口映射到容器启动django的8000端口

使用交互式模式进入容器,再使用ps -ef查看运行的进程
[root@tiger docker]# docker exec -it 9bd /bin/bash
[root@5c4d0613a97b qishi3dj]# ps -ef

3.使用和调试
执行完以上四个步骤,已经可以使用这个封装了django的镜像,接下来查看一下登陆界面

如果需要查看log日志,可以使用如下命令,-f代表持续打印:
docker logs -f container_id
导出镜像
[root@tiger docker]# docker save -o centos_django217.tar.gz tiger/django-217
-o 参数 指定地址和文件名 镜像名



浙公网安备 33010602011771号