关于前端:Docker-系列-04-解疑-Docker-指令

45次阅读

共计 3145 个字符,预计需要花费 8 分钟才能阅读完成。

  • 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:cpcopy,拷贝的意思

  • 将容器代码复制到宿主机:
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 容器中文件门路            : 宿主机文件门路   容器名      : 版本号 

咱们须要晓得的是:

  1. -d:后盾运行
  2. -v A:B:将宿主机 A 门路的文件 / 文件夹挂载到容器 B 的门路下面(两者都是绝对路径)
  3. docker-node:1.0.0:即 docker image ls 查看到的 REPOSITORYTAG

五、隔离 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/ 处取得。

正文完
 0