- Docker 系列文档:https://github.com/LiangJunro…
一、前文回顾 & 前言
通过前文的解说,想必小伙伴们能够起 Nginx 容器和 Node 容器并对一些简略的概念和指令有所理解了。
那么本篇将解说 Docker 中新人须要晓得的一些指令和操作。
- 镜像(Image)指令
- 容器(Container)指令
- Shell 指令
- 宿主机和容器代码同步
- 隔离 Hosts
- 批改容器工夫
二、镜像(Image)指令
- 创立镜像:
docker image build ./ -t hello-docker:1.0.0
- 查看镜像清单:
docker image ls
- 删除单个镜像:
docker rmi <image id>
- 删除所有镜像:
docker rmi $(docker images -q)
- 强制删除全副镜像:
docker rmi -f $(docker images -q)
三、容器(Container)指令
- 创立容器:
docker container create -p 2333:80 hello-docker:1.0.0
- 运行容器(其中那一长串字符,为创立容器失去的后果):
docker container start 4a4d2ac6bf3977ee7c5b4a15562bab17d59b4c61531908fd52632fb0c989f430
- 创立并运行即时容器(退出则敞开并删除容器):
docker run -it --rm --name hello-docker -p 2333:80 hello-docker:1.0.0
- 查看容器清单:
docker ps -a
-
进入指定容器:
docker exec -it 7961990657ef bash
bash
:依据不同镜像来变动,例如alpine
则须要变成/bin/sh
进入容器(Container)之后,切换 Shell 指令应用(实质上同 VS Code 编辑器终端、Windows 的 cmd 等)
- 退出容器:
exit
- 启动 / 进行 / 重启容器:
docker start/stop/restart CONTAINER_ID
- 删除单个容器:
docker rm CONTAINER_ID
- 强制删除单个容器:
docker rm -f CONTAINER_ID
- 进行所有容器:
docker stop $(docker ps -a -q)
或者docker stop $(docker ps -aq)
- 删除所有容器:
docker rm $(docker ps -a -q)
或者docker rm $(docker ps -aq)
三、Shell 指令
- 查看以后文件夹:
ls
- 关上指定文件夹:
cd html
- 查看指定文件内容(带行号):
cat -n index.html
四、代码同步
在咱们起本地 Docker 服务的时候,很容易就就将代码批改了。
然而!该死的代码并不会同步到容器中,这时候如果删除容器这样操作,也太 low 了吧,所以就须要进行代码同步~
上面咱们以 Node.js 那个 Demo 为例,操作下如何同步代码。
代码仓库地址:https://github.com/LiangJunro…
- 将宿主机代码复制到容器:
docker cp "E:/MyWeb/036-Docker for Node/README.md" 8e1910aa2a12:/usr/src/app/README.md
docker cp 宿主机的门路 容器名 | 容器 ID: 容器中的文件门路
注 1:如果是 Windows,且目录蕴含空格的话,最好通过
"门路"
包裹
注 2:目录的话最好后退一层,例如docker cp E:/MyWeb/036-Docker for Node/src /usr/src/app/
注 3:cp
即copy
,拷贝的意思
- 将容器代码复制到宿主机:
docker cp 8e1910aa2a12:/usr/src/app/tsconfig.json E:\MyWeb\all-for-one
docker cp 容器名 : 容器中的文件门路 宿主机的门路
- 让容器代码实时同步宿主机代码:
docker run -d -v E:\MyWeb\all-for-one\src:/usr/src/app/src docker-node:1.0.0
docker run -d -v 容器中文件门路 : 宿主机文件门路 容器名 : 版本号
咱们须要晓得的是:
-d
:后盾运行-v A:B
:将宿主机 A 门路的文件 / 文件夹挂载到容器 B 的门路下面(两者都是绝对路径)docker-node:1.0.0
:即docker image ls
查看到的REPOSITORY
和TAG
五、隔离 Hosts
进入容器后,咱们能够通过 cat /etc/hosts
查看到容器的 Hosts
:
顺带咱们改了下本地 Hosts 文件,将百度改成了 127.127.127.127
,在容器中 ping baidu.com
,咱们能够看到 Hosts 追随宿主机变动了。
那么,怎样才能让它有本人想法,别乱动呢?
首先 ,咱们找到我的项目目录,增加 2 个文件:
hosts
127.0.0.1 localhost
resolv.conf
nameserver 114.114.114.114
这 2 个文件,1 个是批改 Hosts,一个是批改 DNS 端口,即咱们想法子,让容器开启的时候,应用的是独立的 Hosts 和 DNS 端口。
接着 ,咱们运行指令:
docker run -d -v E:\MyWeb\all-for-one\hosts:/etc/hosts -v E:\MyWeb\all-for-one\resolv.conf:/etc/resolv.conf docker-node:1.0.0
这样创立的容器,就能起到隔离的成果。
最初 ,咱们进入新容器并 ping baidu.com
即可:
能够发现,咱们胜利批改了容器的 Hosts!
六、批改容器工夫
失常状况下,Docker 容器的工夫,和咱们机器的时候是不同的,因为它默认设置的时区问题:
- 查问机器工夫:
date
能够看到,下面容器的工夫,是 UTC,和上面宿主机的齐全不统一。
然而,在咱们的代码中,有些是须要存储正确的工夫的,这就不得不批改一下了。
而批改它们非常简单,只须要设置下 Dockerfile
就能够了:
Dockerfile
# 设置 Docker 容器时区
RUN apk add --no-cache tzdata && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo Asia/Shanghai > /etc/timezone
咱们还是以 Node.js 那个服务举例,来尝试对立宿主机和容器的工夫。
代码仓库地址:https://github.com/LiangJunro…
咱们依照仓库的 README.md,创立镜像并运行容器:
进入容器后查看 date
:
能够看到工夫失常了!
七、小结
本章咱们将一些常见的内容都进行了整顿,小伙伴们在第一次看到那么多指令的时候可能有点懵逼,其实 jsliang 也是一点一点敲起来纯熟起来的。
所以这些只能多敲多相熟,我之前尝试过几天没敲,回头就忘了,所以整顿成这篇文章不便本人和大家回顾。
敬请期待下篇:06 – 入门 & Puppeteer 服务
不折腾的前端,和咸鱼有什么区别!
感觉文章不错的小伙伴欢送点赞 / 点 Star。
如果小伙伴须要分割 jsliang:
- Github
集体联系方式寄存在 Github 首页,欢送一起折腾~
争取打造本人成为一个充斥摸索欲,喜爱折腾,乐于扩大本人知识面的一生学习斜杠程序员。
jsliang 的文档库由 梁峻荣 采纳 常识共享 署名 - 非商业性应用 - 雷同形式共享 4.0 国内 许可协定 进行许可。<br/> 基于 https://github.com/LiangJunrong/document-library 上的作品创作。<br/> 本许可协定受权之外的应用权限能够从 https://creativecommons.org/licenses/by-nc-sa/2.5/cn/ 处取得。