了解 Docker
什么是 Docker?
Docker 是一个开放平台,供开发人员和系统管理员在笔记本电脑、虚拟机或云端构建、交付和运行分布式应用程序。Docker 广泛用于以容器化形式运行多个应用程序。例如:一个容器可以充当 Web 服务器来运行应用程序,另一个容器可以处理 Web 应用程序使用的 MySQL 数据库。来源: 维基百科
docker 用在什么地方?
Docker 的应用场景非常广泛,如今的软件包虚拟化运行方式更加高效、快速且安全。那么,为什么不选择 Docker 呢?
让我们举一个简单的例子:假设你的朋友想分享一个项目,这个项目需要最新版本的 Golang、MySQL 数据库和 nginx Web 服务器……现在,要手动运行这个项目,你需要在本地机器上安装相同版本的 Go 系统文件、MySQL 和 Web 服务器。你还需要解决版本配置问题。
为了摆脱这个麻烦,让我们将我们的项目docker化。
首先,编写一个简单的 docker 文件。在你的 root_project 目录中创建一个名为 Dockerfile 的文件名。
FROM amd64/golang:1.10.3
WORKDIR /go/src/app
COPY . .
RUN go get -u github.com/gorilla/mux
RUN go get github.com/pilu/fresh
RUN go get github.com/sirupsen/logrus
CMD ["fresh"]
让我们深入研究一下我们创建的脚本
FROM amd64/golang:1.10.3
使用 go 版本 go:1.10.3 拉取 docker 远程仓库
WORKDIR /go/src/app
定义 docker 容器内的工作目录。
COPY . .
将当前工作目录复制到 docker 容器内的 /go/src/app。
RUN go get -u github.com/gorilla/mux
RUN go get github.com/pilu/fresh
RUN go get github.com/sirupsen/logrus
安装不同的软件包取决于您的项目。在这里,我安装了 /gorilla/mux,它实现了请求路由器和调度器,用于将传入的请求匹配到相应的处理程序。/pilu/fresh 是一个命令行工具,它会在您每次保存代码时构建并(重新)启动您的 Web 应用程序。同样,logrus 用于记录状态数据。请记住,这些软件包并非必需,会根据您的需求进行调整。
CMD ["fresh"]
成功构建并运行 Dockerfile 后,CMD 就会运行。如果你想运行某个命令,就这么简单,使用 CMD。这里我使用了 fresh 命令,因为当我们 docker run 或 project 时,它会自动在 docker 内部的命令中运行。
一旦我们的docker文件准备好了,就可以构建你的docker应用程序
docker build -t docker-golang.
构建 docker 应用程序,其中 -t 标志是为构建的存储库或图像指定的名称,就这么简单。
一旦成功构建镜像,就可以运行
docker run -d -p 8090:8090 -v $(pwd):/go/src/app --env EXAMPLE_ENV_SETUP=test_value_env --name golang-env docker-golang
docker run 命令运行上面创建的镜像,其中:
-d //runs docker image in backgroud (optional)
-p is the port number to run the docker,left:right indicates the port to run outside and inside docker container.
-v //volume created that represents the direcory of file outside and inside docker repository
--env //enviroment value needed while running the project
--name //name of the container which makes easy to remember rather using container id
--docker-golang //name of image or image id you created while building docker
docker以守护进程模式运行后,用于docker ps
了解docker内部正在运行的实例。
输出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ed07831e976a docker-icinga-env "fresh" About an hour ago Up About an hour 0.0.0.0:8090->8090/tcp golang-env
现在,您在 docker 中有一个正在运行的实例,您可以通过浏览器localhost:8090访问它
现在,在正在运行的容器中运行以下命令:
docker exec -it <runnning container name or id> /bin/bash
这将在容器 golang-env 中创建一个新的 Bash 会话。此命令将带你进入正在运行的命令,你可以在其中查看日志并执行任何你想做的事情,因为你有一个正在运行的实例。就这么简单
鏂囩珷鏉ユ簮锛�https://dev.to/samsha1/walk-through-docker-5bm3