Docker的配置
What’s Docker
Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源。Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
在Docker之前,要想在不同的环境中运行同一个应用,需要在不同的环境中安装相同的依赖包。如果操作系统相同,这件事情可能还是个简单的问题,用Conda可以在Python环境中解决。然而,当问题扩展到区别于Python的其他操作系统时,问题就变得复杂了。一个常见的运维的笑话是:“在我的机器上是可以运行的”。Docker的出现解决了这个问题。
Docker的核心思想和Conda有很多相似之处,都是通过容器的方式来管理应用的依赖包:
Docker | Conda | |
---|---|---|
容器 | Container | Environment |
镜像 | Image | Package |
仓库 | Registry | Repository |
配置文件 | Dockerfile | Environment.yml |
通过一个Dockerfile文件,可以将一个应用的运行环境打包成一个镜像,然后通过这个镜像可以生成一个容器,这个容器就是一个独立的运行环境。这个容器可以在任何支持Docker的机器上运行,而不需要担心环境的问题。
Install Docker
Preparation
Docker需要的Linux内核可以通过WSL2来提供。
- 进入Windows的控制面板
- 选择“程序和功能”
- 选择“启用或关闭windows功能”
- 勾选“适用于Linux的Windows子系统”和“虚拟机平台(Virtual Machine Platform)”。
然后通过以下命令设置WSL2:wsl --set-default-version 2
如果你此前没有下载,可能需要几分钟安装WSL2.
Docker Installation
前往官网下载下载相应的安装包。直接安装即可。
Docker Mirros
Docker的镜像下载速度可能会很慢,可以通过修改镜像源来提高下载速度。在Docker Desktop中,可以在“Settings”中的“Docker Engine”中添加镜像源:
{ |
或者前往”./user/.docker/daemon.json”文件中添加镜像源。
Docker Commands
登陆和登出:
docker login |
查看镜像:
docker images |
查看容器:
docker ps |
创建和删除镜像:
docker build -t <image_name> -f <Dockerfile_path> |
创建和删除容器:
docker create --name <container_name> <image_name> |
创建并运行容器:
docker run -it --name <container_name> <image_name> /bin/bash |
-it
:交互式运行容器--name
:容器的名字/bin/bash
:容器启动后执行的命令,启动一个终端
启动和停止容器:
docker start <container_name> |
进入和退出容器:
docker exec -it <container_name> /bin/bash |
Dockerfile
前面提到,Dockerfile是用来构建镜像的配置文件。Dockerfile的语法如下:
FROM <base_image> # 基础镜像 |
一个简单的Dockerfile示例:
FROM ubuntu:18.04 |
一个RUN命令对应一个镜像层,可以通过合并多个命令来减少镜像层的数量。当然,多个RUN命令可以保存中间结果,以防运行失败需要重新创建。
RUN和CMD的区别在于,RUN是在构建镜像时执行,CMD是在容器启动时执行。所以一般CMD命令用于测试镜像是否构建成功。
Docker + VSCode
以下是两个常用的插件:
- Docker - 为Docker提供支持的官方扩展
- Dev Container - 为Container提供远程支持的本地编辑器
在VSCode中按Ctrl+Shift+P
打开命令面板,输入Dev Container: Attach to Running Container
,可以连接到已经运行的容器。这样一来,容器中的文件结构就可以在左侧进行可视化操作了。