dockerfile 的使用
1.先创建一个dockersfile
#当你写下FROM centos:7的时候,你就要想着,在这以后的每一步操作都是在centos 7系统镜像中进行的操作, #你以前是怎么部署应用的,那么请按照你以前的步骤一步一步来就好。 FROM ubuntu:15.10 #声明镜像制作者 MAINTAINER yetongxue <yeli.studio@qq.com> #设置时区 ENV TZ "Asia/Shanghai" # 设置系统环境变量DOCKER_SRC ENV DOCKER_SRC=mysite # 设置系统环境变量DOCKER_HOME ENV DOCKER_HOME=/root # 设置系统环境变量DOCKER_PROJECT ENV DOCKER_PROJECT=/root/project #这句指令相当与:cd /root WORKDIR $DOCKER_HOME #紧接着在root目录下面创建了两个文件夹 RUN mkdir media static #安装应用运行所需要的工具依赖pip,git好像没用上,mysql客户端, #nc是一个网络工具,端口检测脚本wait-for-it.sh里面有使用这个软件 RUN yum -y install epel-release && \ yum -y install python-pip && \ yum -y install git nginx gcc gcc-c++ python-devel && yum -y install mysql && \ yum -y install mysql-devel && yum install nc -y && yum clean all && \ pip install --upgrade pip # cd $DOCKER_PROJECT WORKDIR $DOCKER_PROJECT # . 表示当前目录,一是Dockerfile所在的目录,二是刚刚设置的DOCKER_PROJECT目录, #这一步操作将会把项目中application目录下的所有文件拷贝到镜像目录DOCKER_PROJECT=/root/project下面 COPY ./ ./ #这一步安装python依赖软件django、Pillow、mysql-python、uwsgi、django-ckeditor。 #补充,-i 是修改pip源,默认的源速度很慢,经常卡在这里。 RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt #暴露端口8000,到时候执行docker run 的时候才好把宿主机端口映射到8000 EXPOSE 8000 #赋予start_script执行权限 RUN chmod u+x start_script #容器启动后要执行的命令 ENTRYPOINT ["./start_script"]
如何使用dockersfile 生成镜像,并跑容器
1.进入Dockerfile 所在目录
docker build -t test:v1 . #-t 打一个tage #test:v1 镜像的 名称和 版本 # . dockerfile 所在目录 .代表当前目录
2.查看生成的镜像
[root@192 haha]# docker images -a REPOSITORY TAG IMAGE ID CREATED SIZE test v1 8bafa1ec5a61 7 minutes ago 950 MB
3.使用镜像构建运行容器
[root@192 haha]# docker run -dit -p 9001:9005 --name demo1 test:v1 #-d: 后台运行容器,并返回容器ID; #-i: 以交互模式运行容器,通常与 -t 同时使用; #-p 端口 #9001对外暴露的端口 #9005 容器内部的端口 # --name 新容器的名称 # test:v1 使用的镜像
docker run :创建一个新的容器并运行一个命令
语法
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS说明:
-
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-
-d: 后台运行容器,并返回容器ID;
-
-i: 以交互模式运行容器,通常与 -t 同时使用;
-
-P: 随机端口映射,容器内部端口随机映射到主机的高端口
-
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
-
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-
--name="nginx-lb": 为容器指定一个名称;
-
--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
-
--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
-
-h "mars": 指定容器的hostname;
-
-e username="ritchie": 设置环境变量;
-
--env-file=[]: 从指定文件读入环境变量;
-
--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
-
-m :设置容器使用内存最大值;
-
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container:<name|id> 四种类型;
-
--link=[]: 添加链接到另一个容器;
-
--expose=[]: 开放一个端口或一组端口;
-
--volume , -v: 绑定一个卷
实例
使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。
docker run --name mynginx -d nginx:latest
使用镜像nginx:latest以后台模式启动一个容器,并将容器的80端口映射到主机随机端口。
docker run -P -d nginx:latest
使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data。
docker run -p 80:80 -v /data:/data -d nginx:latest
绑定容器的 8080 端口,并将其映射到本地主机 127.0.0.1 的 80 端口上。
$ docker run -p 127.0.0.1:80:8080/tcp ubuntu bash
使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
runoob@runoob:~$ docker run -it nginx:latest /bin/bash
root@b8573233d675:/#
4.查看容器运行状态
[root@192 haha]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b517b9b84565 test:v1 "sh ./run_web.sh" 12 minutes ago Exited (1) 12 minutes ago demo1
语法
docker ps [OPTIONS]
OPTIONS说明:
-
-a :显示所有的容器,包括未运行的。
-
-f :根据条件过滤显示的内容。
-
--format :指定返回值的模板文件。
-
-l :显示最近创建的容器。
-
-n :列出最近创建的n个容器。
-
--no-trunc :不截断输出。
-
-q :静默模式,只显示容器编号。
-
-s :显示总的文件大小。
输出详情介绍:
CONTAINER ID: 容器 ID。
IMAGE: 使用的镜像。
COMMAND: 启动容器时运行的命令。
CREATED: 容器的创建时间。
STATUS: 容器状态。
状态有7种:
- created(已创建)
- restarting(重启中)
- running(运行中)
- removing(迁移中)
- paused(暂停)
- exited(停止)
- dead(死亡)
PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。
NAMES: 自动分配的容器名称。
列出最近创建的5个容器信息。
6查看容器的日志
[root@192 haha]# docker logs b517b9b84565
浙公网安备 33010602011771号