在Windows里使用Docker
程序员文章站
2022-06-24 08:47:23
...
<转自https://sanwen8.cn/p/2f88vQh.html>
1 曾经的双系统
对于初学Linux的同学,装双系统是一个很大的挑战。下载镜像、上谷歌、上不去谷歌、试各种方法、终于上去了、开始找镜像、下载镜像、刻录光盘、分区、改BIOS启动项顺序、终于装上了、修改引导、改软件源,blablabla。只有经历过的人才懂,精疲力竭。
实际在使用时,也并不舒服。想象一下,正在Linux里愉快的写代码呢,不得不上QQ处理一件事情。好嘛,重启,进Windows。要记得,此刻Linux还开着若干个Terminal,以及N个打开的浏览器Tab页呢!为什么不用QQ for Linux,为什么不用Wine,为什么不用QQ for Web?真心的不好用啊。
再比如,迅雷、Office、Photoshop,这些常用软件在Linux里找不到好的替代品。当然,可以选择Aria2、WPS for Linux,可是并没有原配的好啊。
最终,有人选择了Mac。当聊QQ的时候,调出Terminal是件多么时尚的是事情啊!
再或者,把女朋友的机器拿过来,左手Linux右手Windows,然后装个Synergy,也不失为一种选择。
或者,干脆装个虚拟机吧。
以上是过去式了,现在,我们有了新的选择——Docker。
2 插曲
Ubuntu on Windows都来了,还要啥自行车!Windows里也可以有Linux Shell了。
体验过的老司机说一下(Win10 14316),现在还不!稳!定!
当时我也是天真烂漫,格掉机器,Terminal弹出的一刹那,眼角湿润了!可是,当我装完了QQ等常用软件后发现,系统出错,各种不兼容。只能用Terminal的Windows,你们用过嘛。据说,更新为14367后,好多问题都解决了,还是先不要试了(逃
3 Docker使用四步曲
3.1 下载与安装
访问官方地址:https://www.docker.com/products/docker-toolbox,下载Windows版本的Docker Toolbox。
然后运行安装程序,一路Next即可。
3.2 启动
打开“Docker Quickstart Terminal”即可启动Docker。
经过简单的初始化后,会在Terminal中显示以下内容。需要记下绿色的IP地址,这里是“192.168.99.100”。
3.3 使用
1) Docker自带的Terminal不好用啊,使用Xshell等连接到Docker吧。IP地址使用上一步记来的那个,端口为22,用户名为“docker”,密码为“tcuser”:
2) 拉一个Ubuntu镜像下来,瞬间有了Ubuntu系统有木有:
docker@default:~$ docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
90d6565b970a: Pull complete
40553bdb8474: Pull complete
c3129e7479ab: Pull complete
091663bd70db: Pull complete
Digest: sha256:ba1688fec34f66d8a7ff5b42e697****25d8232c72bf0e38ad06dda10cad157293
Status: Downloaded newer image for ubuntu:latest
3) 查看本地有哪些镜像:
docker@default:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest cf62323fa025 2 days ago 125 MB
4) 使用下载的Ubuntu镜像创建一个“虚拟机”(container,即容器)并进入:
docker@default:~$ docker run -it ubuntu bash
root@20b0f4a7e5a3:/#
20b0f4a7e5a3便是创建的容器ID,可以看到,docker@default变成了root@20b0f4a7e5a3,表示我们已经进入到这个容器了。
5) 退出容器(容器将会关闭):
root@20b0f4a7e5a3:/# exit
exit
docker@default:~$
6) 因为容器之前已经创建过了,再次进入无需重复创建,直接启动并进入即可:
docker@default:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
20b0f4a7e5a3 ubuntu "bash" 6 minutes ago Exited (130) 7 seconds ago furious_sinoussi
docker@default:~$ docker start 2
2
docker@default:~$ docker attach 2
root@20b0f4a7e5a3:/#
docker ps -a可以查看所有的容器(包括关闭的),不加-a参数,则只查看启动的容器。执行docker attach 2可以进入到容器2中。对了,2是20b0f4a7e5a3的简写,也可以写20、20b、20b等等。
7) exit可以退出并关闭容器。有时候我们只是想短暂离开一下,稍后还会回去。那就不要用exit了,使用以下命令:
root@20b0f4a7e5a3:/# [在容器里执行CTRL+P+Q临时退出容器]
docker attach 2再次进入容器。
8) 可以在容器里装一些自己常用的软件,比如:
root@20b0f4a7e5a3:/# apt-get install git vim ...
9) 备份这个为自己量身定做的容器吧(制作成镜像):
docker@default:~$ docker export -o myubuntu.tar 2
或
docker@default:~$ docker export 2 > myubuntu.tar
10) 还原之前制作的镜像:
docker@default:~$ docker import myubuntu.tar yang/myubuntu
sha256:452310aef4d809bc410cb2d6a699ab39b9040c410a2580cd382eebed1acf6afe
docker@default:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
yang/myubuntu latest 452310aef4d8 2 minutes ago 195 MB
ubuntu latest cf62323fa025 2 days ago 125 MB
3.4 进阶
1) 有时候我们希望容器在后台运行,而不是直接把命令的结果输出。
docker@default:~$ docker run ubuntu bash -c 'while true; do echo "hi"; sleep 1; done'
hi
hi
hi
...
以上是我们不希望的,我们希望这样:
docker@default:~$ docker run -d ubuntu bash -c 'while true; do echo "hi"; sleep 1; done'
ab6ffafedcbdc70450b8c02b0853****010f68debd7f58b78f46fb2042b857567
docker@default:~$ docker logs -f ab6
hi
hi
hi
...
docker logs可以获取容器的输出信息。
2) 一个容器可以登入多次,也就是开多个终端连接过去:
docker@default:~$ docker exec -it 20b0f4a7e5a3 bash
3) 有时候我们会在容器里起一个服务,比如HTTP。
对于一个已经存在的容器20b0f4a7e5a3,可以这样做:
docker@default:~$ docker stop 20b0f4a7e5a3
docker@default:~$ docker commit 20b0f4a7e5a3 ubuntu01
docker@default:~$ docker run -p 1234:1234 -it ubuntu01 bash
如果还未创建容器,则直接可以:
docker@default:~$ docker run -p 1234:1234 -it ubuntu bash
然后,需要设置VirtualBox的“网络→端口转发规则”选项:
名称 协议 主机IP 主机端口 子系统IP 子系统端口
myweb TCP 127.0.0.1 1234
1234
当容器中启动HTTP服务时,在Windows里访问:http://192.168.99.100:1234/即可。
4) 尽管Linux中的sz和rz命令可以与Windows互传文件,但还是没有共享一个文件夹来的方便啊。
首先,先在VirtualBox的“共享文件夹→添加共享文件夹”中设置:
共享文件夹路径:X:\win_folder
共享文件夹名称:win_folder
假设win_folder里有3个文件:1.txt、test.mp3、2016.jpg
然后,在Docker里执行以下命令,把共享文件夹win_folder挂到/home/docker/vm_folder下:
docker@default:~$ mkdir -p /home/docker/vm_folder
docker@default:~$ sudo mount -t vboxsf win_folder /home/docker/vm_folder
为了能够让容器访问该共享文件夹,还需要:
docker@default:~$ docker run -it -v /home/docker/vm_folder:/container_folder ubuntu
root@afcf5f504e08:/#
其中,-v参数表示创建一个数据卷,并挂载到容器中。好啦,可以在容器里尽情使用啦:
root@afcf5f504e08:/# cd /container_folder/
root@afcf5f504e08:/# ls
1.txt test.mp3 2016.jpg
参考
http://core0.staticworld.net/images/article/2014/10/docker_windows-100525105-primary.idge.jpg
https://www.zhihu.com/question/422****24/
https://zh.wikipedia.org/zh-cn/Docker_(軟體)
https://www.gitbook.com/book/yeasy/docker_practice/details
http://tuhrig.de/mount-windows-folder-to-boot2docker-vm/
1 曾经的双系统
对于初学Linux的同学,装双系统是一个很大的挑战。下载镜像、上谷歌、上不去谷歌、试各种方法、终于上去了、开始找镜像、下载镜像、刻录光盘、分区、改BIOS启动项顺序、终于装上了、修改引导、改软件源,blablabla。只有经历过的人才懂,精疲力竭。
实际在使用时,也并不舒服。想象一下,正在Linux里愉快的写代码呢,不得不上QQ处理一件事情。好嘛,重启,进Windows。要记得,此刻Linux还开着若干个Terminal,以及N个打开的浏览器Tab页呢!为什么不用QQ for Linux,为什么不用Wine,为什么不用QQ for Web?真心的不好用啊。
再比如,迅雷、Office、Photoshop,这些常用软件在Linux里找不到好的替代品。当然,可以选择Aria2、WPS for Linux,可是并没有原配的好啊。
最终,有人选择了Mac。当聊QQ的时候,调出Terminal是件多么时尚的是事情啊!
再或者,把女朋友的机器拿过来,左手Linux右手Windows,然后装个Synergy,也不失为一种选择。
或者,干脆装个虚拟机吧。
以上是过去式了,现在,我们有了新的选择——Docker。
2 插曲
Ubuntu on Windows都来了,还要啥自行车!Windows里也可以有Linux Shell了。
体验过的老司机说一下(Win10 14316),现在还不!稳!定!
当时我也是天真烂漫,格掉机器,Terminal弹出的一刹那,眼角湿润了!可是,当我装完了QQ等常用软件后发现,系统出错,各种不兼容。只能用Terminal的Windows,你们用过嘛。据说,更新为14367后,好多问题都解决了,还是先不要试了(逃
3 Docker使用四步曲
3.1 下载与安装
访问官方地址:https://www.docker.com/products/docker-toolbox,下载Windows版本的Docker Toolbox。
然后运行安装程序,一路Next即可。
3.2 启动
打开“Docker Quickstart Terminal”即可启动Docker。
经过简单的初始化后,会在Terminal中显示以下内容。需要记下绿色的IP地址,这里是“192.168.99.100”。
3.3 使用
1) Docker自带的Terminal不好用啊,使用Xshell等连接到Docker吧。IP地址使用上一步记来的那个,端口为22,用户名为“docker”,密码为“tcuser”:
2) 拉一个Ubuntu镜像下来,瞬间有了Ubuntu系统有木有:
docker@default:~$ docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
90d6565b970a: Pull complete
40553bdb8474: Pull complete
c3129e7479ab: Pull complete
091663bd70db: Pull complete
Digest: sha256:ba1688fec34f66d8a7ff5b42e697****25d8232c72bf0e38ad06dda10cad157293
Status: Downloaded newer image for ubuntu:latest
3) 查看本地有哪些镜像:
docker@default:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest cf62323fa025 2 days ago 125 MB
4) 使用下载的Ubuntu镜像创建一个“虚拟机”(container,即容器)并进入:
docker@default:~$ docker run -it ubuntu bash
root@20b0f4a7e5a3:/#
20b0f4a7e5a3便是创建的容器ID,可以看到,docker@default变成了root@20b0f4a7e5a3,表示我们已经进入到这个容器了。
5) 退出容器(容器将会关闭):
root@20b0f4a7e5a3:/# exit
exit
docker@default:~$
6) 因为容器之前已经创建过了,再次进入无需重复创建,直接启动并进入即可:
docker@default:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
20b0f4a7e5a3 ubuntu "bash" 6 minutes ago Exited (130) 7 seconds ago furious_sinoussi
docker@default:~$ docker start 2
2
docker@default:~$ docker attach 2
root@20b0f4a7e5a3:/#
docker ps -a可以查看所有的容器(包括关闭的),不加-a参数,则只查看启动的容器。执行docker attach 2可以进入到容器2中。对了,2是20b0f4a7e5a3的简写,也可以写20、20b、20b等等。
7) exit可以退出并关闭容器。有时候我们只是想短暂离开一下,稍后还会回去。那就不要用exit了,使用以下命令:
root@20b0f4a7e5a3:/# [在容器里执行CTRL+P+Q临时退出容器]
docker attach 2再次进入容器。
8) 可以在容器里装一些自己常用的软件,比如:
root@20b0f4a7e5a3:/# apt-get install git vim ...
9) 备份这个为自己量身定做的容器吧(制作成镜像):
docker@default:~$ docker export -o myubuntu.tar 2
或
docker@default:~$ docker export 2 > myubuntu.tar
10) 还原之前制作的镜像:
docker@default:~$ docker import myubuntu.tar yang/myubuntu
sha256:452310aef4d809bc410cb2d6a699ab39b9040c410a2580cd382eebed1acf6afe
docker@default:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
yang/myubuntu latest 452310aef4d8 2 minutes ago 195 MB
ubuntu latest cf62323fa025 2 days ago 125 MB
3.4 进阶
1) 有时候我们希望容器在后台运行,而不是直接把命令的结果输出。
docker@default:~$ docker run ubuntu bash -c 'while true; do echo "hi"; sleep 1; done'
hi
hi
hi
...
以上是我们不希望的,我们希望这样:
docker@default:~$ docker run -d ubuntu bash -c 'while true; do echo "hi"; sleep 1; done'
ab6ffafedcbdc70450b8c02b0853****010f68debd7f58b78f46fb2042b857567
docker@default:~$ docker logs -f ab6
hi
hi
hi
...
docker logs可以获取容器的输出信息。
2) 一个容器可以登入多次,也就是开多个终端连接过去:
docker@default:~$ docker exec -it 20b0f4a7e5a3 bash
3) 有时候我们会在容器里起一个服务,比如HTTP。
对于一个已经存在的容器20b0f4a7e5a3,可以这样做:
docker@default:~$ docker stop 20b0f4a7e5a3
docker@default:~$ docker commit 20b0f4a7e5a3 ubuntu01
docker@default:~$ docker run -p 1234:1234 -it ubuntu01 bash
如果还未创建容器,则直接可以:
docker@default:~$ docker run -p 1234:1234 -it ubuntu bash
然后,需要设置VirtualBox的“网络→端口转发规则”选项:
名称 协议 主机IP 主机端口 子系统IP 子系统端口
myweb TCP 127.0.0.1 1234
1234
当容器中启动HTTP服务时,在Windows里访问:http://192.168.99.100:1234/即可。
4) 尽管Linux中的sz和rz命令可以与Windows互传文件,但还是没有共享一个文件夹来的方便啊。
首先,先在VirtualBox的“共享文件夹→添加共享文件夹”中设置:
共享文件夹路径:X:\win_folder
共享文件夹名称:win_folder
假设win_folder里有3个文件:1.txt、test.mp3、2016.jpg
然后,在Docker里执行以下命令,把共享文件夹win_folder挂到/home/docker/vm_folder下:
docker@default:~$ mkdir -p /home/docker/vm_folder
docker@default:~$ sudo mount -t vboxsf win_folder /home/docker/vm_folder
为了能够让容器访问该共享文件夹,还需要:
docker@default:~$ docker run -it -v /home/docker/vm_folder:/container_folder ubuntu
root@afcf5f504e08:/#
其中,-v参数表示创建一个数据卷,并挂载到容器中。好啦,可以在容器里尽情使用啦:
root@afcf5f504e08:/# cd /container_folder/
root@afcf5f504e08:/# ls
1.txt test.mp3 2016.jpg
参考
http://core0.staticworld.net/images/article/2014/10/docker_windows-100525105-primary.idge.jpg
https://www.zhihu.com/question/422****24/
https://zh.wikipedia.org/zh-cn/Docker_(軟體)
https://www.gitbook.com/book/yeasy/docker_practice/details
http://tuhrig.de/mount-windows-folder-to-boot2docker-vm/
下一篇: wpf根据X与Y轴获取内部值