目錄
Hello World
docker run ubuntu:15.10 /bin/echo "Hello world"
- docker 是命令二進制文件
- run 運行一個容器
- ubuntu:15.10 鏡像名稱,通過是名字加版本號
- 后面是容器里執行的任務
交互式,進入鏡像內部
docker run -i -t ubuntu:15.10 /bin/bash
- -t:在新容器內指定一個偽終端或終端。
- -i:允許你對容器內的標准輸入 (STDIN) 進行交互。
后台運行
# docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
6e42dee957d59d818d0d21bbf0ff8b2bc84d1006baa2696e81f33e023d3e2c04
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6e42dee957d5 ubuntu:15.10 "/bin/sh -c 'while t…" 2 seconds ago Up 1 second sad_villani
# docker logs 6e42dee957d5
hello world
hello world
hello world
停止運行
# docker stop 6e42dee957d5
6e42dee957d5
容器
載入鏡像
docker pull training/webapp
運行應用
# docker run -d -P training/webapp python app.py
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c99a63cd5cb3 training/webapp "python app.py" 4 seconds ago Up 3 seconds 0.0.0.0:32769->5000/tcp jovial_elion
# curl localhost:32769
Hello world!
- -d:讓容器在后台運行。
- -P:將容器內部使用的網絡端口映射到我們使用的主機上。本地端口是32769,映射內部端口5000.
指定端口映射
[root@bigdata-base-001 ~]# docker run -d -p 5000:5000 training/webapp python app.py
458bb7a6520a46e74137032770f846a5faf9afb43b6ba324667d4b1936566ea0
[root@bigdata-base-001 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
458bb7a6520a training/webapp "python app.py" 4 seconds ago Up 3 seconds 0.0.0.0:5000->5000/tcp wizardly_babbage
c99a63cd5cb3 training/webapp "python app.py" About a minute ago Up About a minute 0.0.0.0:32769->5000/tcp jovial_elion
[root@bigdata-base-001 ~]# curl localhost:5000
Hello world!
可以發現運行兩個應用,但對應本地不同的端口
查看日志
# docker logs 458bb7a6520a
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
172.17.0.1 - - [03/Jan/2019 14:13:38] "GET / HTTP/1.1" 200 -
tail日志
# docker logs -f 458bb7a6520a
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
172.17.0.1 - - [03/Jan/2019 14:13:38] "GET / HTTP/1.1" 200 -
查看應用的進程
# docker top 458bb7a6520a
UID PID PPID C STIME TTY TIME CMD
root 14801 14765 0 22:13 ? 00:00:00 python app.py
登入鏡像內部
docker exec -it 458bb7a6520a /bin/bash
移除容器
docker rm c99a63cd5cb3
查看最近一次創建的容器
# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
458bb7a6520a training/webapp "python app.py" 20 minutes ago Exited (137) About a minute ago wizardly_babbage
鏡像
查看本地鏡像
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 14.04 90d5884b1ee0 5 days ago 188 MB
php 5.6 f40e9e0f10c8 9 days ago 444.8 MB
拉取鏡像
docker pull ubuntu:13.10
查找鏡像
docker search httpd
更新鏡像
首先進入鏡像
docker run -t -i ubuntu:15.10 /bin/bash
root@e218edb10161:/# apt-get update
更新后,提交副本
# docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2
sha256:70bf1840fd7c0d2d8ef0a42a817eb29f854c1af8f7c59fc03ac7bdee9545aff8
- -m:提交的描述信息
- -a:指定鏡像作者
- e218edb10161:容器ID
- runoob/ubuntu:v2:指定要創建的目標鏡像名
構建鏡像
使用docker build通過Dockerfile構建鏡像。
一個示例Dockerfile
FROM centos:6.7
MAINTAINER Fisher "fisher@sudops.com"
RUN /bin/echo 'root:123456' |chpasswd
RUN useradd runoob
RUN /bin/echo 'runoob:123456' |chpasswd
RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE 22
EXPOSE 80
CMD /usr/sbin/sshd -D
構建
$ docker build -t runoob/centos:6.7 .
Sending build context to Docker daemon 17.92 kB
Step 1 : FROM centos:6.7
---> d95b5ca17cc3
Step 2 : MAINTAINER Fisher "fisher@sudops.com"
---> Using cache
---> 0c92299c6f03
Step 3 : RUN /bin/echo 'root:123456' |chpasswd
---> Using cache
---> 0397ce2fbd0a
Step 4 : RUN useradd runoob
......
- -t :指定要創建的目標鏡像名
- . :Dockerfile 文件所在目錄,可以指定Dockerfile 的絕對路徑
# docker images | grep run
runoob/centos 6.7 b9f70b080d42 12 seconds ago 191MB
使用鏡像來創建容器
# docker run -t -i runoob/centos:6.7 /bin/bash
設置鏡像標簽
# docker tag b9f70b080d42 runoob/centos:dev
# docker images | grep run
runoob/centos 6.7 b9f70b080d42 3 minutes ago 191MB
runoob/centos dev b9f70b080d42 3 minutes ago 191MB
鏡像標簽可以理解為版本號。比如我們項目demo的版本是1.5.1,那么標簽可以是:
-- 構建一個鏡像,名稱是ryan/demo, tag是1.5.1
docker build -t ryan/demo:1.5.1 .
-- 因為這個鏡像是最新的,將指針latest 指向這個
docker tag ryan/demo:1.5.1 latest
-- 對於版本1來說,這也是最新的
docker tag ryan/demo:1.5.1 1
也就是說,tag可以有多個對應的是同一個鏡像。
