docker 初实践

初步流程整理:
Container 可以去跑App,因为 Container 包含了一个独立的文件系统,虽然 Container 的运行就像一个独立的进程 process ,但是 Container 的 Image 文件提供了一个独立的文件系统,使得 Container 就像运行在独立的 OS 上,每个 Container 隔离开来。Image 文件就是从 Dockerfile 来的。Dockerfile 是基于txt类型的文本脚本,能够快速的创建 Image 文件

部署APP
第一步,编写 Dockerfile 文件;
第二步,docker build -t getting-started .
这一步的意识是构建 Image 文件, -t getting-started 的意思是连接上 Image 文件,并取了一个人性化的名字 getting-started 。 . 的意思是 在当前目录下寻找 Dockerfile 文件。
第三步,启动 Container 。 docker run -dp 3000:3000 getting-started
-dp 其实是两步操作,d 代表 detached 意思,意思是 分开的,相当于开了一个新的 Container ,因此不懂 Container 之间是隔离的,p 代表着 port ,端口的映射,主机上的 3000 映射到 Container 的3000 端口上。

App修改
当有新的需求提出时,源代码经过了修改后,需要重新 构建Docker 文件,并重新映射端口,即 重复上述的 第二步和第三步。 在这之前,记得先停止当前正在运行的 Container,否则会出现端口映射冲突。停止的方法可以在命令行操作,也可以在 Docker 面板操作。

共享App (把App推到线上) http://localhost/tutorial/sharing-our-app/
第一步,创建对应的 docker 仓库
第二部, 在 Docker 面板,或者 Docker 命令行登录对应的 docker hub 账号,
第三步,连接 Image和 仓库 。docker tag image-name your-user-name/image-name
第四步,推送 Image 文件。docker push your-user-name/getting-started
第五步,在线上环境 发版。

数据持久化 http://localhost/tutorial/persisting-our-data/

In general, each container should do one thing and do it well.
每个容器都应该只做一件事。 设计模式中的 单一职责原则

那么想数据持久化 将其存如数据库时,必然要发生通信。如果容器在同一个网络中,则可以通信,否则不能。有点像进程间的通信呢。

在这里插入图片描述
每一个服务都是一个单独的容器,因此要实现容器间的通信。

第一步,docker network create todo-app 。 创造 network , 使 App 和 Mysql 处于同一个 net 里面。
第二步,开启 Mysql 服务,并连接上 network 。

docker run -d `
    --network todo-app --network-alias mysql `
    -v todo-mysql-data:/var/lib/mysql `
    -e MYSQL_ROOT_PASSWORD=secret `
    -e MYSQL_DATABASE=todos `
    mysql:8.0

第三步,docker exec -it mysql -p , 然后输入密码 , 可以查看数据库。

接下来, 就要使 App 连接上 Mysql
首先,要知道 Mysql 处于哪一个 network,可以通过 nicolaka/netshoot 镜像实现。

docker run -it --network todo-app nicolaka/netshoot

接着,dig mysql ,会看见如下所示

   ; <<>> DiG 9.18.8 <<>> mysql
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32162
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;mysql.             IN  A

;; ANSWER SECTION:
mysql.          600 IN  A   172.23.0.2

;; Query time: 0 msec
;; SERVER: 127.0.0.11#53(127.0.0.11)
;; WHEN: Tue Oct 01 23:47:24 UTC 2019
;; MSG SIZE  rcvd: 44

最后就是来连接 App 和 Mysql

docker run -dp 3000:3000 `
  -w /app -v "$(pwd):/app" `
  --network todo-app `
  -e MYSQL_HOST=mysql `
  -e MYSQL_USER=root `
  -e MYSQL_PASSWORD=secret `
  -e MYSQL_DB=todos `
  node:18-alpine `
  sh -c "yarn install && yarn run dev"

然后 在 App 里面添加几条记录,可以在 Mysql 里面查到。至此,完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值