Docker入门教程:创建镜像并运行容器
Docker入门教程:创建镜像并运行容器
本文将详细介绍如何使用Docker创建自己的镜像并运行容器。通过一个简单的"Hello, world!"程序,我们将演示从准备工作、编写测试应用、构建镜像到运行容器的完整流程。
前言
使用Docker的镜像可以快速创建和部署应用,大大节约了部署的时间。Docker的镜像提供了除内核外完整的运行时环境,确保代码的环境一致性,从而避免了"这段代码在我机器上没问题"这类问题的出现。那么,如何创建一个镜像来运行自己的应用呢?让我们通过一个简单的尝试来了解这个过程。
1、准备工作
- 首先需要准备一个Linux环境,这里使用的是Ubuntu 20.04。
- 其次,需要安装好Docker。可以通过以下命令查看当前操作系统中是否安装了Docker:
docker info
- 通过VSCode连接到Linux环境,并安装好Go语言。
2、编写测试应用
创建一个文件夹docker-test,用来编写测试应用。
首先进行初始化,在当前的docker-test目录下执行以下命令,创建go.mod文件:
go mod init docker-test
然后,创建一个main.go文件,内容如下:
package main
import (
"fmt"
"time"
)
func main() {
for {
fmt.Println("Hello, world!")
time.Sleep(10 * time.Second)
}
}
这个文件只会每隔10秒输出一次"Hello, world!"。
为了在容器中可以编译运行Go语言程序,需要下载一个Go官方提供的预装Go编译器的Docker镜像。执行以下命令下载golang镜像:
docker pull golang:latest
使用以下命令查看当前系统中已经下载的镜像:
docker images
出现golang:latest镜像,说明已经成功下载了golang:latest镜像。
3、构建镜像,并运行容器
3.1 构建镜像
现在已经准备好了测试应用,可以开始构建镜像了。
需要在当前docker-test目录下创建一个Dockerfile文件,用于构建镜像,内容如下:
# 使用官方 Go 镜像作为基础镜像
FROM golang:latest
# 设置工作目录
WORKDIR /app
# 将当前目录下的所有文件复制到镜像的工作目录中
COPY . .
# 构建 Go 应用
RUN go build -o main main.go
# 运行可执行文件
# 运行 go 程序,(CMD:在启动容器时才执行此行。RUN:构建镜像时就执行此行)
CMD ["./main"]
这个Dockerfile文件中,使用golang:latest作为基础镜像,设置工作目录为/app,将当前目录下的所有文件复制到镜像的工作目录中,构建Go应用,并运行可执行文件。
执行以下命令构建镜像:
docker build -t docker-test:latest .
其中,docker-test是镜像的名称,latest是镜像的标签(tag)。如果不指定-t选项,则Docker会为镜像分配一个默认的无标签状态。
标签帮助我们管理不同版本的镜像。例如,可以有docker-test:1.0、docker-test:2.0等版本。latest表示最新版本。
最后的.
表示构建上下文路径,构建镜像时,默认会在上下文路径中查找名为Dockerfile的文件,并依据这个文件来构建镜像。如果你想依据其他文件来构建镜像,或者Dockerfile在其他路径下,你可以用-f选项来指定Dockerfile的路径。
执行完成之后,再次运行以下命令,可以看到新构建的镜像docker-test:lastest:
docker images
3.2 运行容器
现在,已经构建好了镜像,可以运行容器了。执行以下命令运行容器:
docker run -d -it --name docker-test docker-test:latest
其中:
-d
:后台运行容器-it
:交互式运行容器,进入容器后可以输入命令--name
:为容器指定一个名称docker-test:latest
:运行的镜像名称
执行完成之后,运行以下命令,可以看到新运行的容器,容器的名称为docker-test:
docker ps
3.3 进入容器,查看效果
容器运行成功后,可以通过以下命令查看容器的日志:
docker logs docker-test
可以看到,容器已经打印出多次"Hello, world!"。
也可以通过以下命令查看实时打印的消息:
docker attach
执行以下命令进入容器:
docker exec -it docker-test /bin/bash
发现容器已经进入容器的/app目录,即在Dockerfile中设置的工作目录。
执行以下命令,可以看到docker-test目录下的所有文件已经成功复制到镜像的工作目录中:
ls -l
4、总结
本文介绍了如何创建自己的镜像并运行容器,通过这个例子,可以更加熟悉Dockerfile的编写,以及Docker镜像的相关操作。
文章参考了《docker从安装到部署项目,一篇文章教会你》。想要学习更多docker知识的小伙伴可以移步大佬的文章。