Docker学习笔记1 -- 刚入手docker时的几个命令
本文作者:@Ryan Miao
本文链接:https://www.cnblogs.com/woshimrf/p/learn-docker-note1.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!
目录
Hello World
后台运行
停止运行
容器
载入镜像
指定端口映射
查看日志
查看应用的进程
登入镜像内部
移除容器
镜像
查看本地镜像
拉取镜像
查找镜像
更新镜像
构建镜像
设置镜像标签
目录
Hello World
后台运行
停止运行
容器
载入镜像
指定端口映射
查看日志
查看应用的进程
登入镜像内部
移除容器
镜像
查看本地镜像
拉取镜像
查找镜像
更新镜像
构建镜像
设置镜像标签
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可以有多个对应的是同一个镜像。https://www.cnblogs.com/woshimrf/p/learn-docker-note1.html