Docker环境搭建
重装了docker,原本是使用Docker Toolbox进行安装的,但在对应docker开源项目上,开发者说已经不维护docker toolbox,推荐使用 Desktop for Windows Home,这在官网可以直接下载,安装一直next就可以,成功后,可能会遇到
WSL 2 requires an update to its kernel component. For information please visit https://aka.ms/wsl2kernel
的启动问题,实际上只要更新wls2即可更新 WSL 2 Linux 内核,微软拥抱linux,于是做出了wsl2,能够更好地运行本地的虚拟机,其他产商(vm/docker)也通过接口进行适配,这也许就是toolbox停止维护的原因,总之,在更新本地wsl2之后,docker就能够正常启动了。
Docker 入门项目
尝试制作一个vue的image文件,并启动运行
- 准备,新建一个vue项目,参考vue
- 进入vue工程,新建两个文件
Dockerfile 用于设置image基础参数(端口,初始镜像),内容如下
FROM node:latest 设置初始镜像版本,最新即为latest
COPY . /app 设置拷贝到的文件名称
WORKDIR /app 设置默认的工作路径
EXPOSE 8080 设置容器向外部暴露的端口
.dockerignore 设置容器打包时不包含的文件,内容如下
.git 不打包.git工程文件
开始制作image,-t后为名称,名称后还有个点表示当前文件位置,eg:..
为上级
docker image build -t docker-test .
打包结果
#8 exporting to image
#8 exporting layers
#8 exporting layers 3.3s done
#8 writing image sha256:45b7a1e821cf33be3c68f9af16bf6ab40250e4e467aad61e61e1fd47238786c0 0.0s done
#8 naming to docker.io/library/docker-test done
#8 DONE 3.5s
可以使用docker image ls
查看完成的打包,也可以在docker客户端中直接看到自己完成的image。
运行刚制作好的镜像
docker container run -p 8080:8080 -it docker-test /bin/bash
指令参数:-p表示要映射的端口,前者为本机端口,后者为容器端口(亦可参考docker端口映射),运行后,就进入了一个bash的输入界面,和linux的操作是一模一样的,和vue一样,使用npm run dev
就能启动相应的程序。
使ctrl+d或者exit指令退出容器,编辑器崩溃的情况下,可以通过
docker container ls 打印所有容器
docker container kill [id] 终止指定运行的容器
结束所有操作后,为了不占用空间,可以把容器文件删除
docker container ls --all 显示所有运行过的容器实例
res:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f9a1e383df3c docker-test "docker-entrypoint.s…" 6 minutes ago Exited (0) About a minute ago inspiring_kepler
docker container rm f9a1e 删除指定的实例,id号输入前几位即可
res:
f9a1e
在本实例中,对于vue示例的测试,最终运行的vue实例没能够通过本地端口的访问显示在浏览器中,重新进入容器,由于要修改容器中的文件,但同时发现默认没有安装vim,使用
apt-get update
apt-get install vim
升级apt并安装vim,以后这些文件指令或者想要提前操作的指令(npm run dev
)可以写在Dockerfile中,这样在制作image的时候就默认将需要环境配置好,在容器中查看文件后发现是vue项目默认网址为localhost,修改为0.0.0.0,并重新启动就好了
需要注意的地方
- container实例是由image镜像启动的程序,可以使用
docker container run -p 8080:8080 -it docker-test /bin/bash
的方式启动一个刚制作好的镜像文件
对于之前就启动过的container,可以通过docker container start [container id]
的方式启动一个已经存在的container,如果想要能够以shell的方式控制已经启动过的docker,则使用docker exec -it [container id] bash
,或者可以使用docker container attach [containerid]
- 在container shell内部时,可以通过使用ctrl+d或者exit指令退出容器,此时只是退出了shell而已,还要使用
docker container kill [containerID]
终止任何在运行过程中的container。 - 任何启动过的container实例,在本地会存在一个容器文件,可以使用
docker container ls -a
的方式打印出任何相关的文件列表。然后通过docker container rm [containerID]
的方式删除该文件。删除image镜像则使用docker image rm [imageName]
。
docker实例和宿主机的文件传输可以通过以下指令实现
docker cp [filename] <容器名或id>:[location] //将本地文件发送到指定的容器中
docker cp <容器名或id>:[location] [filename] //将docker文件发送到宿主设备中
该指令和scp很像。
最后,以上的所有containerid都可以只输入前几位