docker自定制鏡像
阿新 • • 發佈:2019-04-10
ash python 而且 ror oot com 命令封裝 img 概述
概述
很多情況下我們需要自定制鏡像,如果自定制過程中需要下載配置很多包,而且這些包之間還有依賴關系,那麽如果我們手動去操作的話就會很麻煩,正確的做法是把操作的命令封裝到一個文件裏,然後直接執行這個文件就行了,docker提供了這個文件,就是Dockerfile,下面我們用Dockerfile來自定制一個運行在centos環境下的django鏡像
定制過程
1.下載centos鏡像
docker pull centos
2. 下載django-2.1.7源碼包與阿裏雲擴展源epel.repo文件
在/opt目錄下建立一個docker目錄,切換到docker目錄,下載django源碼包與epel.repo文件
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
3. 創建空的Dockerfile和run.sh文件
Dockerfile是存放創建鏡像過程中所需命令的文件,run.sh是執行Django的bash腳本
創建好之後/opt/docker目錄下的文件應該如下
[[email protected] docker]# ls Django-2.1.7.tar.gz Dockerfile epel.repo run.sh
4. 編寫Dockerfile
這一步是這篇博客的重點
FROM centos # 指定base image MAINTAINER robin # 作者名字 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 myproject ADD run.sh /opt/qishi3dj/run.sh WORKDIR /opt/qishi3dj RUN chmod 777 run.sh # 更改run.sh的權限 EXPOSE 9090 # 聲明容器端口 CMD ["/bin/sh","run.sh"] # 容器啟動時默認執行的命令
5. 編寫run.sh
python3 manage.py runserver 0.0.0.0:8000
生成鏡像
生成鏡像使用build命令
docker build -t robin/django-217 .
啟動容器
後臺啟動容器,將宿主機的9090端口映射到容器的8000端口
docker run -d -p 9090:8000 robin/django-217
進入容器
查看容器運行狀態,找到容器id
docker ps
以交互模式進入容器
docker exec -it xxx /bin/bash
查看運行的進程,可以看到
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 15:43 ? 00:00:00 /bin/sh run.sh
root 6 1 0 15:43 ? 00:00:00 python3 manage.py runserver 0.0.0.0:8000
root 28 6 4 15:48 ? 00:03:00 /usr/bin/python3 manage.py runserver 0.0.0.0:8000
root 36 0 0 16:56 pts/0 00:00:00 /bin/bash
root 49 36 0 16:56 pts/0 00:00:00 ps -ef
使用
修改settings.py的ALLOWHOSTS=["*"]
訪問192.168.1.111:9090
導出鏡像
docker save -o centos_django217.tar.gz robin/django-217
-o 指定地址和文件名
robin/django-217為鏡像名
[[email protected] docker]# ls
centos_django217.tar.gz Django-2.1.7.tar.gz Dockerfile epel.repo run.sh
docker自定制鏡像