image 镜像 其实就是操作系统的抽象集合,他可以是nginx 也可以是 mysql, 也可以是Ubuntu,Centos
container 容器 image快照 + 一系列部署操作的抽象集合,
docker ps # 查看运行的container
docker ps -a # 查看所有的快照
docker run -it --rm ubuntu /
加上了--rm
的话,利用exit 命令推出系统,快照就会立即销毁,否则docker ps -a
就会看到很对死尸git add .
之后的代码,属于第一个层次,也就是本地代码,git commit -am'push'
之后的代码,他们会出现在 git log
里面,可以看到,commit 之后的代码,本地分支超前于线上分支
git push
之后的代码,就是线上分支了.下面是分支合并图.
docker中也分为 container image repository ,这三个层次和git有异曲同工之妙用,,我也曾经怀疑,git时候能替代docker,事实证明, 这完全是两个不同的东西.
repository 线上仓库了,
image 快照,这个可以代表一个个系统,实际上通过命令行,它是可以登录的,
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cecd0b0f9487 friendlyhello "python app.py" 2 hours ago Up 2 hours 0.0.0.0:8080->80/tcp goofy_brattain
b49f2755005c nginx "nginx -g 'daemon of…" 2 hours ago Up 2 hours docker-nginx
docker exec -it b49f2755005c /bin/bash
root@linuxkit-025000000001:/#
docker run
命令详解请仔细查看下面这条的命令,此命令将会启动 Node 容器,将当前应用程序目录挂载到容器中,然后在应用程序上运行 npm install:
docker run -it --rm --name lllnode -v "$PWD":/usr/src/myapp -w /usr/src/myapp node:0.10.40 npm install
基础命令是 docker run � node:0.10.40,它创建一个容器实例并运行您之前拉取的 node:0.10.40 镜像。
-it 开关指定您想要一个前台交互式终端。(备用模式是分离的后台进程,可以使用 -d 指定它。)
--rm 开关指定执行清理,表示在您退出容器后,Docker 会立即删除它。如果没有指定此开关,该容器会以停止状态持久保存在磁盘上,而且您可以从中断点开始重新启动它。但是,对于忘记删除容器实例的用户而言,重新启动容器是磁盘耗尽的常见来源。如果不使用 --rm,那么任何时候都能运行以下命令来查看您遗留下了多少陈旧的停止容器(数量可能会让您吃惊):
docker ps -a
↘ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cecd0b0f9487 friendlyhello "python app.py" 2 hours ago Up 2 hours 0.0.0.0:8080->80/tcp goofy_brattain
5b7005a1c8dd friendlyhello "python app.py" 2 hours ago Created jolly_babbage
9e276854d0d1 friendlyhello "python app.py" 2 hours ago Exited (0) 2 hours ago zealous_roentgen
0ce31bc738ca 5a42f7575b51 "python app.py" 2 hours ago Exited (0) 2 hours ago vibrant_taussig
5a302f9b09e6 5a42f7575b51 "python app.py" 2 hours ago Exited (0) 2 hours ago epic_hermann
67783f9a98e7 0a189dbd9625 "python app.py" 2 hours ago Exited (0) 2 hours ago optimistic_gates
38cae2317126 0a189dbd9625 "python app.py" 2 hours ago Exited (0) 2 hours ago cranky_wright
a42f207fe69c 0a189dbd9625 "python app.py" 2 hours ago Exited (0) 2 hours ago laughing_pascal
f14ac314fab3 0a189dbd9625 "python app.py" 2 hours ago Created infallible_galileo
7554e3d24733 0a189dbd9625 "python app.py" 2 hours ago Created cocky_gauss
ad90f88aae61 0a189dbd9625 "python app.py" 2 hours ago Exited (0) 2 hours ago confident_stonebraker
b49f2755005c nginx "nginx -g 'daemon of…" 2 hours ago Up 2 hours docker-nginx
871284810b8f 0a189dbd9625 "python app.py" 2 hours ago Exited (0) 2 hours ago sleepy_lumiere
2701daafc205 0a189dbd9625 "python app.py" 2 hours ago Exited (0) 2 hours ago youthful_almeida
a1ecaa248c33 0a189dbd9625 "python app.py" 2 hours ago Exited (0) 2 hours ago distracted_noyce
75472ebd7527 0a189dbd9625 "python app.py" 2 hours ago Exited (0) 2 hours ago wizardly_lewin
31b8b4315a91 friendlyhello "python app.py" 3 hours ago Exited (1) 3 hours ago zealous_newton
448c02beb030 friendlyhello "python app.py" 3 hours ago Exited (1) 3 hours ago relaxed_mendeleev
69d7e616cbc6 friendlyhello "python app.py" 3 hours ago Exited (0) 3 hours ago awesome_zhukovsky
6b73e11c4bcb hello-world "/hello" 4 hours ago Exited (0) 4 hours ago dreamy_wozniak
b95671d0eaae node "-p 8011:8011" 4 hours ago Created heuristic_heyrovsky
8a10bf9012ca node "-p 8011:8011" 4 hours ago Created admiring_goldwasser
a40bfac4856f node "node" 4 hours ago Exited (0) 4 hours ago clever_sammet
123bdb6464c0 node "node" 5 hours ago Exited (0) 5 hours ago boring_engelbart
bb59f1d55441 67b4a016f8cb "python app.py" 6 hours ago Created compassionate_montalcini
7eb1e35ad6f7 67b4a016f8cb "python app.py" 6 hours ago Exited (137) 5 hours ago stupefied_mahavira
c0a1ba9ddc2f 67b4a016f8cb "python app.py" 6 hours ago Exited (137) 6 hours ago friendly_williams
c7b0e05c3dae 67b4a016f8cb "python app.py" 6 hours ago Exited (0) 6 hours ago jolly_germain
50248307b5ec 67b4a016f8cb "python app.py" 6 hours ago Created nifty_dijkstra
77925356d23d 67b4a016f8cb "python app.py" 6 hours ago Exited (0) 6 hours ago upbeat_wiles
380fcb2c68f6 ubuntu "bash" 6 hours ago Exited (137) 6 hours ago peaceful_haibt
d6d141ec3a3c hello-world "/hello" 6 hours ago Exited (0) 6 hours ago tender_banzai
1ea999cf3a8a hello-world "/hello" 6 hours ago Exited (0) 6 hours ago stoic_sammet
f5319374a270 centos "/bin/bash" 6 hours ago Exited (0) 6 hours ago elegant_cori
c3df7c080b2d centos "/bin/bash" 7 hours ago Exited (0) 7 hours ago awesome_colden
ade9abfeafac centos "/bin/bash" 7 hours ago Exited (0) 7 hours ago boring_benz
e9cb0ab2d530 ubuntu "/bin/bash" 5 weeks ago Exited (0) 5 weeks ago leet
ada992977b46 leetcode "/app/main" 5 weeks ago Exited (0) 5 weeks ago leetcode
e5f38f0f41a5 leetcode "/app/main" 5 weeks ago Exited (0) 5 weeks ago heuristic_pike
0b8eaafae5c6 4250dcf6b479 "/bin/sh -c 'pip ins…" 6 weeks ago Exited (2) 6 weeks ago modest_cocks
dc2cbf43aa19 chat "python ./socket_cli…" 6 weeks ago Exited (2) 6 weeks ago jovial_feistel
ef4e207fe8d4 chat "python ./socket_cli…" 6 weeks ago Exited (2) 6 weeks ago loving_cocks
285bc232db1b 974428bc7560 "python ./socket_cli…" 6 weeks ago Exited (1) 6 weeks ago distracted_almeida
5a37071f357c centos:latest "/bin/bash" 6 weeks ago Exited (255) 6 weeks ago festive_benz
# 这么多躺尸容器,一键删除吧
docker rm < CONTAINER ID >
一个个删除太慢了
docker rm `docker ps -a | grep [Created|Exited] | awk '{print $1}'`
批量删除 Created从未使用的 和 Exited已退出的 的吧
--name lllnode 选项显式命名容器,这对在其他 Docker 命令中引用该容器很有用。如果没有显式命名容器,Docker 会为它分配一个生成的文本名称 — 这个名称通常没什么意义。您还可以通过内部 ID(一个很长、对人类不友好的十六进制字符串)来引用该容器。
-v "$PWD":/usr/src/myapp 选项创建一个卷挂载点。将您当前的工作目录 ($PWD) 挂载为容器内的 /usr/src/myapp。然后可从该容器内访问应用程序的 Node.js 源代码(或您当前的工作目录中可能拥有的其他任何 Node.js 源代码)。
-w /usr/src/myapp 选项设置您运行的命令的工作目录。在这个示例中,工作目录更改为挂载的卷。
docker run 命令末尾的 npm install 命令在工作目录上的容器内运行。最终结果是您通过容器在当前目录上运行 npm install— 而不安装 Node.js 或它的任何前提软件。
--env PORT=8011 环境变量命名
一个是运行,一个是hack+同步操作介入,,exec是无干扰的hack,,,docker 简直是开发神器....
docker build
与 docker image build
然并无卵区别, docker image build
根据当前文件 的Dockerfile
创建一个快照 image,Dockerfile
语法自己查官网,....
可以依据网络上的快照,也可以依据自己docker build
创建的快照来运行容器,换句话说,本机没有的快照,就会去网络上下载一个...然后下次本机就有了,就用本机的.
docker run --rm -it -v <宿主主机目录:容器目录> -w <容器初始目录> <image快照名称> bash
于是就运行了一个退出后立即销毁的容器,并且自带交互式命令行的容器.
Dockerfiles 文件
FROM nginx
RUN nginx
运行命令
docker build --tag=my-nginx . # 创建镜像
docker run -p 8080:80 --rm my-nginx
Dockerfiles 文件
FROM httpd
运行命令
docker build --tag=my-apache . # 创建镜像
docker run -p 80:80 --rm my-apache
Dockerfiles 文件
FROM node
WORKDIR /app
COPY . /app
运行命令
docker build --tag=my-node . # 创建镜像
docker run -p 80:80 --rm my-node
FROM tomcat
运行命令
docker build --tag=my-tomcat . # 创建镜像
docker run -p 80:8080 --rm my-tomcat
不会弄...
不会弄...
docker run --rm -p 80:80 -v $(pwd):/usr/share/nginx/html --name my-nginx nginx
运行之后,当前目录下的文件和容器内部的环境进行了共享,本地文件修改之后,打开网页能立即看到被修改后的内容..
文件目录下
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<title>home</title>
</head>
<body>
<nav>
<ul>
<li><a href="/">home</a></li>
<li><a href="/about.html">about</a></li>
</ul>
</nav>
home
</body>
</html>
home.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>about</title>
</head>
<body>
<nav>
<ul>
<li><a href="/">home</a></li>
<li><a href="/about.html">about</a></li>
</ul>
</nav>
about
</body>
</html>