Docker从入门到进阶

目录

1. docker是什么

2. 部署docker

3. 镜像管理

3.1 搜索、查看、获取、历史

3.2 重命名、删除

3.3 导出、导入

4. 容器管理

4.1 查看、启动容器

4.2 关闭、删除容器

4.3 进入、退出容器

4.4 基于容器创建镜像

4.5 日志、信息 

5. 仓库管理 

5.1 仓库简介

5.2 私有仓库部署

6. 数据管理

6.1 数据卷简介

6.2 数据卷实践

6.3 数据卷容器简介

6.4 数据卷容器实践

7 网络管理

7.1 端口映射详解

7.2 随机映射实践

7.3 指定映射实践

8. Docker 进阶

8.1  Dockerfile简介

8.2 Dockerfile快速入门

8.3 基础指令详解

8.4 文件编辑指令详解

8.5 环境指令详解

8.6 Dockerfile构建过程

8.7 Dockerfile构建django环境 

8.7.1 手工部署django项目环境

8.7.2 Dockerfile案例实践


1. docker是什么

Docker从入门到进阶_第1张图片

 Docker是一个开源的容器引擎,它基于LXC容器技术,使用Go语言开发。

源代码托管在Github上,并遵从Apache2.0协议。

Docker采用C/S架构,其可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。

简单来说:Docker就是一种快速解决生产问题的一种技术手段

优点:

        环境部署速度快、安全

        轻量级应用,一次打包到处运行

        管理成本低

缺点:

        依赖操作系统,依赖网络

Docker 官网:http://www.docker.com

Github Docker 源码:https://github.com/docker/docker 

2. 部署docker

安装部署请查看:CentOS7.6安装docker

3. 镜像管理

        Docker镜像是什么?它是一个只读的文件,就类似于我们安装操作系统时候所需要的那个iso光盘镜像,通过运行这个镜像来完成各种应用的部署。

这里的镜像就是一个能被docker运行起来的一个程序。

3.1 搜索、查看、获取、历史

 搜索镜像

        命令格式:        

docker search [image_name]

获取镜像

         命令格式:

docker pull [image_name]

# 或者
docker image pull [image_name]

注释:获取的镜像文件在/var/lib/docker 目录下 

查看镜像

        命令格式:

docker images 

#或者
docker image ls 

镜像的ID唯一标识了镜像,如果ID相同,说明是同一镜像。TAG信息来区分不同发行版本,如果不指定具体标记,默认使用latest标记信息

docker images -a 列出所有的本地的images(包括已删除的镜像记录)

查看镜像历史

docker history [image_name]

        我们获取到一个镜像,想知道他默认启动了哪些命令或者都封装了哪些系统层,那么我们可以使用docker history这条命令来获取我们想要的信息 

3.2 重命名、删除

镜像重命名

        命令格式:

docker tag [old_image]:[old_version] [new_image]:[new_version]

删除镜像

         命令格式:

docker rmi [image_id/image_name:image_version]

# 或者
docker image rm [image_id/image_name:image_version]

注意:如果一个image_id存在多个名称,那么应该使用name:tag的格式删除镜像,清除状态为dangling的镜像

# 清理不再使用的docker镜像(none镜像)-a移除所有
docker image prune 

# 删除部分镜像
docker image prune -a --filter "until=24h"

3.3 导出、导入

导出镜像

        将已经下载好的镜像,导出到本地,以备后用。

        命令格式:

docker save -o [包文件] [镜像]
docker save [镜像1] ... [镜像n] > [包文件]
或者
docker image save –o [包文件] [镜像1] ... [镜像n]
docker image save [镜像1] ... [镜像n] > [包文件]

        注意:docker save 会保存镜像的所有历史记录和元数据信息

导入镜像

        命令格式:

docker load < [image.tar_name]
docker load --input [image.tar_name]

注意:  docker load 不能指定镜像的名称

4. 容器管理

容器是什么?

        容器就类似于我们运行起来的一个操作系统,而且这个操作系统启动了某些服务。

        这里的容器指的是运行起来的一个Docker镜像。

4.1 查看、启动容器

查看容器

        命令格式:

docker ps

# 或者
docker container ls

        注意:管理docker容器可以通过名称,也可以通过ID,ps是显示正在运行的容器, -a是显示所有运行过的容器,包括已经不运行的容器

启动容器

        命令格式:

docker run <参数,可选> [docker_image] [执行的命令]

# 或
docker container run <参数,可选> [docker_image] [执行的命令]

# 守护进程方式启动容器
docker run -d [docker_image]

        启动已终止的容器:在生产过程中,常常会出现运行和不运行的容器,我们使用 start 命令开起一个已关闭的容器

docker start [container_id]

# 或
docker container start [container_id]

4.2 关闭、删除容器

关闭容器

docker stop [container_id]

# 或
docker container stop [container_id]

删除容器

正常删除容器

docker rm [container_id]

# 或
docker container rm [container_id]

删除所有已停止的容器

docker container prune

强制删除运行容器

docker rm -f [container_id]

删除部分容器

docker container prune --filter "until=24h"

拓展批量关闭容器

docker rm -f $(docker ps -a -q)

4.3 进入、退出容器

创建并进入容器

docker run --name [container_name] -it [docker_image] /bin/bash

# 或者
docker container run --name [container_name] -it [docker_image] /bin/bash

docker 容器启动命令参数详解:

        --name:给容器定义一个名称

        -i:则让容器的标准输入保持打开。

        -t:让docker分配一个伪终端,并绑定到容器的标准输入上

        /bin/bash:执行一个命令

退出容器:

        方法一:exit

        方法二:Ctrl + D

手工方式进入容器 

docker exec -it 容器id /bin/bash

# 或者
docker container exec -it 容器id /bin/bash

4.4 基于容器创建镜像

命令格式:

docker commit -m '改动信息' -a "作者信息" [container_id] [new_image:tag]

4.5 日志、信息 

查看容器运行日志

docker logs [容器id]

查看容器详细信息

docker inspect [容器id]

查看容器网络信息

docker container  inspect -f '{{.NetworkSettings.IPAddress}}' [容器id]

5. 仓库管理 

5.1 仓库简介

Docker仓库

        Docker的仓库有三大类:

                公有仓库:Docker hub、Docker cloud、等

                私有仓库:registry、harbor等

                本地仓库:在当前主机存储镜像的地方。

相关命令

        和仓库相关的命令:

                docker login [仓库名称] 

                docker pull [镜像名称]

                docker push [镜像名称]

                docker search [镜像名称]

5.2 私有仓库部署

创建仓库流程

        1、根据registry镜像创建容器

        2、配置仓库权限

        3、提交镜像到私有仓库

        4、测试

实施方案

下载registry镜像

docker pull registry

启动仓库容器

docker run -d -p 5000:5000 registry

检查容器效果

curl 127.0.0.1:5000/v2/_catalog

配置容器权限

vim /etc/docker/daemon.json
{"registry-mirrors": ["http://74f21445.m.daocloud.io"], "insecure-registries": ["192.168.8.14:5000"]}

 注意:私有仓库的ip地址是宿主机的ip,而且ip两侧有双引号

重启docker服务

systemctl restart docker
systemctl status docker

效果查看

启动容器

docker start 315b5422c699

 标记镜像

docker tag ubuntu-mini 192.168.8.14:5000/ubuntu-14.04-mini

提交镜像

docker push 192.168.8.14:5000/ubuntu-14.04-mini

下载镜像

docker pull 192.168.8.14:5000/ubuntu-14.04-mini

6. 数据管理

         docker的镜像是只读的,虽然依据镜像创建的容器可以进行操作,但是我们不能将数据保存到容器中,因为容器会随时关闭和开启,那么如何将数据保存下来呢?答案就是:数据卷和数据卷容器

6.1 数据卷简介

        就是将宿主机的某个目录,映射到容器中,作为数据存储的目录,我们就可以在宿主机对数据进行存储,缺点是:太单一

docker 数据卷命令详解

# docker run --help
。。。
  -v, --volume list               Bind mount a volume (default [])
                                     挂载一个数据卷,默认为空

         我们可以使用命令 docker run 用来创建容器,可以在使用docker run 命令时添加 -v 参数,就可以创建并挂载一个到多个数据卷到当前运行的容器中。

        -v 参数的作用是将宿主机的一个目录(绝对路径)作为容器的数据卷挂载到docker容器中,使宿主机和容器之间可以共享一个目录,如果本地路径不存在,Docker也会自动创建。

        -v 宿主机文件:容器文件

6.2 数据卷实践

 关于数据卷的管理我们从两个方面来说:

        1、目录

        2、普通文件

数据卷实践 目录

docker run -itd --name [容器名字] -v [宿主机目录]:[容器目录] [镜像名称] [命令(可选)]

命令演示:

创建测试文件

echo "file1" > /tmp/file1.txt

启动一个容器,挂载数据卷

docker run -itd --name test1 -v /tmp:/test1 nginx

测试效果

~# docker exec -it a53c61c77 /bin/bash
root@a53c61c77bde:/# cat /test1/file1.txt 
file1

数据卷实践 文件

docker run -itd --name [容器名字] -v [宿主机文件]:[容器文件] [镜像名称] [命令(可选)]

 注意:容器里面的文件虽然可以改名,但类型必须和宿主机文件一致

命令演示:

创建测试文件

echo "file1" > /tmp/file1.txt

启动一个容器,挂载数据卷

docker run -itd --name test2 -v /tmp/file1.txt:/nihao/nihao.sh nginx

测试效果

~# docker exec -it 84c37743 /bin/bash

root@84c37743d339:/# cat /nihao/nihao.sh

file1

数据卷实践 之 删除

docker volume rm

docker volume prune

6.3 数据卷容器简介

什么是数据卷容器?

将宿主机的某个目录,使用容器的方式来表示,然后其他的应用容器将数据保存在这个容器中,达到大批量应用数据同时存储的目的

docker 数据卷命令详解

# docker run --help

。。。

  -v, --volumes-from value       Mount volumes from the specified container(s) (default [])

                                     从指定的容器挂载卷,默认为空

数据卷容器操作流程

        如果使用数据卷容器,在多个容器间共享数据,并永久保存这些数据,需要有一个规范的流程才能做得到:

                1、创建数据卷容器

                2、其他容器挂载数据卷容器

                注意:数据卷容器不启动

6.4 数据卷容器实践

创建一个数据卷容器

命令格式:

docker create -v [容器数据卷目录] --name [容器名字] [镜像名称] [命令(可选)]

执行效果

docker create -v /data --name v-test nginx

创建两个容器,同时挂载数据卷容器

命令格式:

docker run --volumes-from [数据卷容器id/name] -tid --name [容器名字] [镜像名称] [命令(可选)]

执行效果:

创建 vc-test1 容器

docker run --volumes-from 4693558c49e8 -tid --name vc-test1 nginx /bin/bash

创建 vc-test2 容器

docker run --volumes-from 4693558c49e8 -tid --name vc-test2 nginx /bin/bash

确认卷容器共享

进入vc-test1,操作数据卷容器

~# docker exec -it vc-test1 /bin/bash

root@c408f4f14786:/# ls /data/

root@c408f4f14786:/# echo 'v-test1' > /data/v-test1.txt

root@c408f4f14786:/# exit

进入vc-test2,确认数据卷

~# docker exec -it vc-test2 /bin/bash

root@7448eee82ab0:/# ls /data/

v-test1.txt

root@7448eee82ab0:/# echo 'v-test2' > /data/v-test2.txt

root@7448eee82ab0:/# exit

回到vc-test1进行验证

~# docker exec -it vc-test1 /bin/bash

root@c408f4f14786:/# ls /data/

v-test1.txt  v-test2.txt

root@c408f4f14786:/# cat /data/v-test2.txt

v-test2

回到宿主机查看/data/目录

~# ls /data/

~#

结果证明:容器间可以共享数据卷里容器,不过数据是保存在数据卷内,并没有保存到宿主机的文件目录中

7 网络管理

7.1 端口映射详解

端口映射简介

默认情况下,容器和宿主机之间网络是隔离的,我们可以通过端口映射的方式,将容器中的端口,映射到宿主机的某个端口上。这样我们就可以通过 宿主机的ip+port的方式来访问容器里的内容

端口映射种类

        1、随机映射    -P(大写)

        2、指定映射     -p 宿主机端口:容器端口

注意:

        生产场景一般不使用随机映射,但是随机映射的好处就是由docker分配,端口不会冲突,

        不管哪种映射都会影响性能,因为涉及到映射

7.2 随机映射实践

默认随机映射

命令格式:

docker run -d -P [镜像名称]

命令效果:

启动一个 nginx 镜像

docker run -d -P nginx

查看效果

注意:

    宿主机的32768被映射到容器的80端口,-P 自动绑定所有对外提供服务的容器端口,映射的端口将会从没有使用的端口池中自动随机选择,但是如果连续启动多个容器的话,则下一个容器的端口默认是当前容器占用端口号+1

在浏览器中访问 http://192.168.8.14:32768/,效果显示:

Docker从入门到进阶_第2张图片

注意:浏览器输入的格式是: docker容器宿主机的ip:容器映射的端口

指定主机随机映射

令格式

docker run -d -p [宿主机ip]::[容器端口] --name [容器名称] [镜像名称]

命令效果

docker run -d -p 192.168.8.14::80 --name nginx-2 nginx

检查效果

7.3 指定映射实践

指定端口映射

命令格式:

docker run -d -p [宿主机ip]:[宿主机端口]:[容器端口] --name [容器名字] [镜像名称]

注意:

        如果不指定宿主机ip的话,默认使用 0.0.0.0

        容器端口必须清楚,而且必须写出来

命令实践:

        现状我们在启动容器的时候,给容器指定一个访问的端口 1199

docker run -d -p 192.168.8.14:1199:80 --name nginx-1 nginx

查看新容器ip

docker inspect --format='{{.NetworkSettings.IPAddress}}' 0ad3acfbfb76

查看容器端口映射

 查看宿主机开启端口

查看浏览器效果:

Docker从入门到进阶_第3张图片

多端口映射方法

命令格式

docker run -d -p [宿主机端口1]:[容器端口1]  -p [宿主机端口2]:[容器端口2] --name [容器名称] [镜像名称]

开起多端口映射实践

docker run -d -p 520:443 -p 6666:80 --name nginx-3 nginx

查看容器进程

8. Docker 进阶

8.1  Dockerfile简介

什么是Dockerfile

        Dockerfile类似于我们学习过的脚本,将我们在上面学到的docker镜像,使用自动化的方式实现出来。

Dockerfile的作用

        1、找一个镜像:   ubuntu

        2、创建一个容器: docker run  ubuntu

        3、进入容器:     docker exec -it 容器 命令

        4、操作:        各种应用配置

                ....

        5、构造新镜像:    docker commit  

Dockerfile 使用准则

        1、大: 首字母必须大写D

        2、空: 尽量将Dockerfile放在空目录中。

        3、单: 每个容器尽量只有一个功能。

        4、少: 执行的命令越少越好。

Dockerfile 基础四指令:

   基础镜像信息         从哪来?

   维护者信息           我是谁?

   镜像操作指令         怎么干?

   容器启动时执行指令    嗨!!!

Dockerfile使用命令:

构建镜像命令格式:

        docker build -t [镜像名]:[版本号] [Dockerfile所在目录]

构建样例:

        docker build -t nginx:v0.2 /opt/dockerfile/nginx/

参数详解:

        -t    指定构建后的镜像信息

        /opt/dockerfile/nginx/    则代表Dockerfile存放位置,如果是当前目录,则用 .(点)表示

8.2 Dockerfile快速入门

准备环境

创建Dockerfile专用目录

mkdir /docker/images/ssh -p

cd /docker/images/ssh

创建秘钥认证

ssh-keygen -t rsa

cat ~/.ssh/id_rsa.pub > authorized_keys

准备软件源

cp /etc/apt/sources.list ./

定制文件

创建Dockerfile文件

# 构建一个基于ubuntu的ssh定制镜像
# 基础镜像
FROM ubuntu-ssh
# 镜像作者
MAINTAINER dashuai [email protected]

# 执行命令
# 增加软件源	-- 由于网络原因,我们不执行这一步
# ADD sources.list /etc/apt/sources.list
# 安装 ssh 服务
RUN apt-get update && apt-get install -y openssh-server curl vim net-tools && mkdir -p /var/run/sshd && mkdir -p /root/.ssh && sed -i "s/.*pam_loginuid.so/#&/" /etc/pam.d/sshd && apt-get autoclean && apt-get clean && apt-get autoremove
# 复制配置文件到相应位置,并赋予脚本可执行权限
ADD authorized_keys /root/.ssh/authorized_keys

# 对外端口
EXPOSE 22

# 启动ssh
ENTRYPOINT ["/usr/sbin/sshd","-D"]

构建镜像

docker build -t ubuntu-ssh .

效果查看

使用新镜像启动一个容器,查看效果

docker run -d -p 10086:22 ubuntu-ssh

容器检查

docker ps

docker port c03d146b64d4

ssh查看效果

ssh 192.168.8.14 -p 10086

注意: 若出现“sign_and_send_pubkey: signing failed: agent refused operation报错”

执行代码解决: eval "$(ssh-agent -s)"

             ssh-add

8.3 基础指令详解

基础指令

FROM

FROM 

FROM :。

解释:

FROM 是 Dockerfile 里的第一条而且只能是除了首行注释之外的第一条指令

MAINTAINER

MAINTAINER 

解释:

指定该dockerfile文件的维护者信息。类似我们在docker commit 时候使用-a参数指定的信息

RUN

RUN                                      (shell模式)

RUN["executable", "param1", "param2"]。           (exec 模式)

解释:

    表示当前镜像构建时候运行的命令

注释:

   shell模式:类似于  /bin/bash -c command

                举例: RUN echo hello

    exec  模式:类似于 RUN ["/bin/bash", "-c", "command"]

                举例: RUN ["echo", "hello"]

EXPOSE

EXPOSE  [...]

解释:

    设置Docker容器对外暴露的端口号,Docker为了安全,不会自动对外打开端口,如果需要外部提供访问,还需要启动容

器时增加-p或者-P参数对容器的端口进行分配。

ENTRYPOINT

   ENTRYPOINT ["executable", "param1","param2"]        (exec 模式)

   ENTRYPOINT command param1 param2                     (shell模式)

解释:

  每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个起效。

8.4 文件编辑指令详解

目录文件编辑指令

ADD

格式:

    ADD ... 

    ADD ["",... ""]

解释:

将指定的  文件复制到容器文件系统中的 

src 指的是宿主机,dest 指的是容器

    如果源文件是个压缩文件,则docker会自动帮解压到指定的容器中(无论目标是文件还是目录,都会当成目录处理)。

COPY

格式:

    COPY ... 

    COPY ["",... ""]

解释:

    单纯复制文件场景,Docker推荐使用COPY 

VOLUME

格式:

    VOLUME ["/data"]

解释:

   VOLUME 指令可以在镜像中创建挂载点,这样只要通过该镜像创建的容器都有了挂载点

通过 VOLUME 指令创建的挂载点,无法指定主机上对应的目录,是自动生成的。

    举例:

        VOLUME ["/var/lib/tomcat7/webapps/"]

ADD实践     

拷贝普通文件

Dockerfile文件内容

...

# 执行命令

...

# 增加文件

ADD ["sources.list","/etc/apt/sources.list"]

...

拷贝压缩文件

Dockerfile文件内容

...

# 执行命令

...

# 增加文件

ADD ["linshi.tar.gz","/nihao/"]

...

COPY实践    

    修改Dockerfile文件内容:

...

# 执行命令

...

# 增加文件

COPY index.html /var/www/html/

...

ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"]

VOLUME实践

修改Dockerfile文件内容:

# 在上一个Dockerfile文件内容基础上,在COPY下面增加一个VOLUME

VOLUME ["/data/"]

...

8.5 环境指令详解

环境设置指令

ENV

格式:

    ENV  

    ENV = ...

解释:

    设置环境变量,可以在RUN之前使用,然后RUN命令时调用,容器启动时这些环境变量都会被指定

WORKDIR

格式:

WORKDIR /path/to/workdir                  (shell 模式)

解释:

    切换目录,为后续的RUN、CMD、ENTRYPOINT 指令配置工作目录。 相当于cd

    可以多次切换(相当于cd命令),

     也可以使用多个WORKDIR 指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径。例如

   举例:

    WORKDIR /a

    WORKDIR b

    WORKDIR c

    RUN pwd

    则最终路径为 /a/b/c。

ENV实践

修改Dockerfile文件内容:

# 在上一个Dockerfile文件内容基础上,在RUN下面增加一个ENV

ENV NIHAO=helloworld

WORKDIR实践

修改Dockerfile文件内容:

# 在上一个Dockerfile文件内容基础上,在RUN下面增加一个WORKDIR

WORKDIR /nihao/itcast/

RUN ["touch","itcast.txt"]

 8.6 Dockerfile构建过程

Dockerfile构建过程:

        从基础镜像1运行一个容器A

        遇到一条Dockerfile指令,都对容器A做一次修改操作

        执行完毕一条命令,提交生成一个新镜像2

        再基于新的镜像2运行一个容器B

        遇到一条Dockerfile指令,都对容器B做一次修改操作

        执行完毕一条命令,提交生成一个新镜像3

        ...

构建过程镜像介绍

        构建过程中,创建了很多镜像,这些中间镜像,我们可以直接使用来启动容器,通过查看容器效果,从侧面能看到我们每次构建的效果。提供了镜像调试的能力,我们可以通过docker history <镜像名> 来查看整个构建过程所产生的镜像

拓展:执行的步骤越多越好呢?还是越少越好?

构建缓存

        我们第一次构建很慢,之后的构建都会很快,因为他们用到了构建的缓存。

        不适用构建缓存方法常见两种:

                全部不同缓存:docker build --no-cache -t [镜像名]:[镜像版本] [Dockerfile位置]

        只要构建的缓存时间不变,那么就用缓存,如果时间一旦改变,就不用缓存了

样例:

# 构建一个基于ubuntu-base的docker定制镜像

# 基础镜像

FROM ubuntu-base


# 镜像作者

MAINTAINER President.Wang [email protected]


# 创建构建刷新时间

ENV REFRESH_DATE 2018-11-02


# 执行命令

...

构建历史:

查看构建过程查看

docker history

清理构建缓存:

docker system prune

docker system prune --volumes

8.7 Dockerfile构建django环境 

8.7.1 手工部署django项目环境

需求:

基于docker镜像,手工部署django项目环境

方案分析:

        1、docker环境部署

        2、django环境部署

        3、djanog项目部署

        4、测试

技术关键点:

        1、docker环境部署

                使用docker镜像启动一个容器即可

        2、django环境部署

                django软件的依赖环境

                django软件的基本环境配置

3、django项目部署

        django框架的下载

        项目文件配置

        启动django项目

4、测试

        宿主机测试

解决方案:

        1、docker环境配置

                1.1 获取docker镜像

                1.2 启动docker容器

        2、django环境部署

                2.1 基础环境配置

                2.2 django环境配置

        3、django项目部署

                3.1 创建django项目

                3.2 创建django应用

                3.3 项目启动

        4、测试

                4.1 宿主机测试

方案实施:

        1、docker环境配置

                1.1 获取docker镜像:ubuntu-ssh

1.2 启动docker容器

        启动容器,容器名称叫 django

docker run -d -p 10086:22 --name django ubuntu-ssh

        进入容器

ssh 192.168.8.14 -p 10086

2、django环境部署

        2.1 基础环境配置

        基础目录环境

mkdir /data/{server,softs} -p

cd /data/softs

scp [email protected]:/data/softs/Django-2.1.2.tar.gz ./

        注意:因为我们的docker镜像就是唯一的,所以就没有必要单独创建python虚拟环境了

2.2 django环境配置

        安装基本依赖软件

yum install python3-pip -y

        安装django软件

cd /data/softs

tar xf Django-2.1.2.tar.gz

cd Django-2.1.2

python3 setup.py install

3、django项目部署

        3.1 创建django项目

        创建项目

cd /data/server

django-admin startproject djangotest

        3.2 创建django应用

        创建应用

cd /data/server/djangotest

python3 manage.py startapp test1

   注册应用

# vim itcast/settings.py



INSTALL_APP = [

    。。。

    'test1',

]

配置应用

admin-1@python:/data/soft# cat /data/server/djangotest/test1/views.py

from django.shortcuts import render

from django.http import HttpResponse



# Create your views here.



def hello(resquest):

   return HttpResponse("itcast V1.0")  

      url文件配置

admin-1@python:/data/soft# cat /data/server/djangotest/djangotest/urls.py

...

from test1.views import *



urlpatterns = [

path('admin/', admin.site.urls),

     path('hello/', hello),

]

3.3 项目启动

设置访问主机

# vim itcast/settings.py

...

ALLOWED_HOSTS = ['*']

启动项目

python3 manage.py runserver 172.17.0.2:8000

注意:

要提前用ifconfig来检查一下当前容器的IP地址,以方面接下来的测试

4、测试

4.1宿主机测试

查看容器的ip地址

docker inspect django

浏览器、或curl查看效果:

172.17.0.2:8000/hello/

8.7.2 Dockerfile案例实践

环境分析:

        1、软件源文件,使用国外源,速度太慢,所以我们可以自己使用国内的软件源。

        因为我们在手工部署的时候,使用的是官方(国外)的源,所以为了部署快一点呢,我使用国内的源。

        2、软件安装,涉及到了各种软件

        3、软件运行涉及到了软件的运行目录

        4、项目访问,涉及到端口

关键点分析:

        1、增加文件,使用 ADD 或者 COPY 指令

        2、安装软件,使用 RUN 指令

        3、命令运行,使用 WORKDIR 指令

        4、项目端口,使用 EXPOSE 指令

        5、容器运行,使用 ENTRYPOINT

定制方案:

        1、基于ubuntu-ssh基础镜像进行操作

        2、安装环境基本软件

        3、定制命令工作目录,并增加文件

        4、开放端口

        5、执行项目

Dockerfile定制

进入标准目录

mkdir /docker/images/django -p

cd /docker/images/django

第一版dockerfile内容

# 构建一个基于ubuntu的docker定制镜像

# 基础镜像

FROM ubuntu-ssh

# 镜像作者

MAINTAINER President.Wang [email protected]

# 执行命令

RUN apt-get install python3-pip -y

# 增加文件

ADD Django-2.1.2.tar.gz /data/softs/

WORKDIR /data/softs/Django-2.1.2

RUN python3 setup.py install



# 创建项目

WORKDIR /data/server

RUN django-admin startproject itcast

# 创建应用

WORKDIR /data/server/djangotest

RUN python3 manage.py startapp test1

RUN sed -i "/staticfiles/a\    'test1'," djangotest/settings.py

# 配置应用

COPY views.py /data/server/djangotest/test1/

RUN sed -i '/t p/a\from test1.views import *' djangotest/urls.py

RUN sed -i "/\]/i\    path('hello/', hello)," djangotest/urls.py

# 启动项目

RUN sed -i "s#S = \[\]#S = \['*'\]#" djangotest/settings.py

# 对外端口

EXPOSE 8000

# 运行项目

ENTRYPOINT ["python3","manage.py","runserver","0.0.0.0:8000"]

把Django-2.1.2.tar.gz和views.py文件放到这个目录中

效果查看

构建镜像

docker build -t ubuntu-django .

运行镜像

docker run -p 8000:8000 -d ubuntu-django

访问镜像,查看效果

你可能感兴趣的:(linux,docker)