第一次使用Docker创建镜像
我在这里写下了我从阅读这个网站上学到的东西!
他查阅的网站是http://docs.docker.jp/engine/userguide/dockerizing.html
只要是每天都在思考的后端事情,就算我不太熟悉,我也需要学习一下。首先,我会尝试学习关于Docker的知识。
Docker的强大之处!
这更轻量化比Virtual Box。
一开始的构建好像不一样。这里不深入讨论。
这个链接对我有帮助。
你好世界!(下载至验证操作)
首先,从以下链接中下载Docker:
Mac:https://docs.docker.com/docker-for-mac/install/
Windows:https://docs.docker.com/docker-for-windows/install/
Linux:https://docs.docker.com/install/linux/docker-ce/ubuntu/
完成下载后,在Mac上打开终端。
docker run hello-world
输入”を”,
Hello from Docker.
This message shows that your installation appears to be working correctly.
...
如果显示为这样,说明已经非常成功了。
Docker的术语和简单机制。
简单地。
容器 - Docker是一种用于运行应用程序的虚拟环境框架
镜像 - 用于启动容器的设计说明书
Docker守护程序 - 管理和控制容器的工具
Docker客户端 - 与Docker守护程序进行交互的命令行工具
Docker Hub - 用于注册镜像的目录
基本流程是从 Docker Hub 拉取镜像,
使用该镜像创建容器,
就是这样的感觉。
马上试着处理集装箱。
首先,我们将从Docker Hub上拉取作为容器基础的镜像。这次我们尝试拉取busybox镜像。
docker pull busybox
创建并启动容器
docker run busybox
一开始看似没有任何动作,但因为没有传递命令,所以只是启动了而没有进行任何操作。
docker run busybox echo "hello from busybox"
输入这个命令时,您可以清楚地看到 echo 已经成功执行了。
使用docker ps命令可以显示当前正在运行的容器列表。
如果要显示当前没有运行的容器,请加上-a选项。
docker ps -a
如果你想要进入容器内并执行各种操作的话
docker run -it busybox sh
在操作容器内的命令行时,可以使用”-i”和”-t”选项。如果在选项或命令方面有困惑,可以使用”–help”。
docker run -- help
// 以下オプション等の説明がずらっと出力される
删除容器
如果继续以此方式运行并创建容器,内存将达到极限。
使用docker ps -a确认要删除的容器ID,然后使用以下命令删除容器。
docker rm 305297d7a235(削除したいコンテナのdocker id)
你可以选择进行多个删除,但每次都复制Docker ID也很麻烦。这种情况下,可以使用以下命令。
docker rm $(docker ps -a -q -f status=exited)
可以使用选项-q来仅显示id的数字,使用选项-f可以筛选特定状态的容器。在这种情况下,我们显示并批量删除了状态为exited的容器ID。如果使用的是新版本的docker,可以通过以下命令实现相同的功能。非常简单!
docker container prune
顺便说一句,如果每次删除都很麻烦的话,还有一个方便的选项可以在执行后自动删除容器,它叫做–rm。
docker run --rm (任意のimage)
查看和删除图像清单。
显示所有
docker image
如果想要删除不再需要的图像,
docker rmi 305297d7a235(削除したいimageのimage id)
可以批量删除image!(通过评论告诉我)
指的是未被标记且未被容器引用的image将被删除。
docker image prune
运行静态网站
咱们开始吧。我们要使用的图像是我专为此演示创建并托管在注册表prakhar1989/static-site上的单页网站。
https://docker-curriculum.com/ 提供了准备原始镜像的选项。
请使用这个命令来启动。
docker run --rm prakhar1989/static-site
顺便说一下,像这次一样,在本地没有image的情况下运行,系统似乎会自动拉取image。
当显示”Nginx is running…”时表示成功。
…那么,我们如何查看网站呢?
事实上,此时并没有分配端口。您可以使用Ctrl + c来暂时停止容器。
首先,在启动网站时,有一个非常方便的”detach(分离)”模式。这是一种在容器中运行并在后台启动容器的模式。令人高兴的是,即使关闭了终端,也可以继续启动容器。使用-d选项可以进入detach(分离)模式。
然后,使用-P选项将容器公开到随机端口。最后,使用–name选项为容器命名。
docker run -d -P --name static-site prakhar1989/static-site
我应该能够用这个去看看港口了。
docker port static-site
如果成功的话,那么会返回以下响应,您只需要在浏览器中打开并显示即可。
在这种情况下,网址是 http://localhost:32769/ 。
80/tcp -> 0.0.0.0:32769
443/tcp -> 0.0.0.0:32768
当然可以指定特定的端口,并且可以使用小写的 “-p” 命令进行端口指定。
docker run -p 8888:80 prakhar1989/static-site
如果要停止以分离模式打开的容器,请使用“docker stop”命令停止。
docker stop static-site
到目前为止,从人流准备好的形象操作非常出色!接下来我们希望能够自己制作形象。
Docker 镜像
有两种类型的Docker镜像。
基础镜像……用作容器的基础。通常是类似于Ubuntu或Busybox等操作系统的东西。
子镜像……在基础镜像基础上构建,并添加了各种功能的镜像。
还有其他分类方法如下:
官方镜像……看起来是由Docker提供的。基本上是一个单词,例如python、ubuntu、hello-world等。
用户镜像……由普通人创建的。基本上是以user/image-name的形式命名的。
我将尝试创建自己的形象,尽管我已经创建了各种形象。
我将制作一个简单的Flask应用程序。似乎这是一个随机显示猫的应用程序?
(这是一个Python框架。我虽然没有使用过Python,但会按照这份文件进行尝试)
在终端中输入下面的命令。(注意:不要在容器内执行)
git clone https://github.com/prakhar1989/docker-curriculum.git
cd docker-curriculum/flask-app
由于该语言是Python,因此将使用python:3-onbuild作为基础镜像。关于onbuild,使用Dockerfile可以方便地进行版本指定和其他各种实用功能的说明。
构建镜像的版本包括自动化应用程序运行中的无聊部分的辅助程序。不必手动执行这些任务(或编写这些任务的脚本),这些镜像为您完成了这项工作。现在,我们已经拥有了创建自己的镜像所需的所有要素- 一个功能完备的Web应用程序和一个基础镜像。我们将如何完成这个任务?答案是 – 使用一个Dockerfile。
Dockerfile是什么东西?
请帮我执行一些在构建图像时使用的命令的便利文本。
据说它的写法几乎与Linux命令相同。
在刚刚克隆的flask-app目录中,创建一个名为Dockerfile的文件。
(尽管该目录中已经存在Dockerfile的描述,但为了练习从零开始创建,我们将删除它。)
创建文件(在flask-app目录中)。
touch Dockerfile
那么,我们将对Dockerfile进行修改。
使用编辑器等打开文件,并添加以下一行代码来指定基础镜像。
FROM python:3-onbuild
我可以在 FROM 上指定基本镜像。
接下来需要指定要使用的端口号。这次我们使用5000。
EXPOSE 5000
接下来写CMD命令。
据说,CMD命令是在docker run时创建容器时执行的。
CMD ["python", "./app.py"]
通过上述代码运行 $ python app.py。
总结一下,Dockerfile的内容如下。
FROM python:3-onbuild
EXPOSE 5000
CMD ["python", "./app.py"]
只需完成这个Dockerfile!
然后通过构建即可创建镜像。
请在flask-app内执行以下命令。
docker build -t (自分のdocker hubID)/catnip .
您可以使用-t标签名称来为任意标签命名。
我已经有了这个想法!接下来就通过以下方法来实现图像。
docker run -p 8888:5000 (自分のdocker hubID)/catnip
当你访问 http://localhost:8888/ 时,会播放随机可爱猫咪的gif动画!
结束
我已经学会了如何处理各种容器以及创建镜像!但是我还不知道如何根据不同的环境进行自定义,所以下次我打算继续学习Docker并参考教程!