docker基本使用1
1. 容器的基础命令
使用docker的好处
- 便于构建各种依赖关系
- 快速构建
- 快速迁移
- 和宿主主机互不影响
初步使用
$ docker run busybox echo hello world
hello world
$ docker run -ti ubuntu
root@3cc1d9fcadda:/# apt-get update
root@3cc1d9fcadda:/# apt-get install figlet
root@3cc1d9fcadda:/# figlet LuxcGo
_ ____
| | _ ___ _____ / ___| ___
| | | | | \ \/ / __| | _ / _ \
| |__| |_| |> < (__| |_| | (_) |
|_____\__,_/_/\_\___|\____|\___/
root@3cc1d9fcadda:/# dpkg -l
root@3cc1d9fcadda:/# dpkg -l | wc -l
98
lucas@VM-12-4-ubuntu:~$ dpkg -l | wc -l
1877
运行一个容器
$ docker run jpetazzo/clock
$ sleep 10 &
[1] 18495
$
[1] + 18495 done sleep 10
# 后台创建并启动和sleep命令类似
$ docker run -d jpetazzo/clock
# 只显示运行着的容器
$ docker ps
# 显示所有容器
$ docker ps -a
# 查看最后一个启动的容器
$ docker ps -l
# 查看所有正在运行的容器的id(--quiet)
$ docker ps -q
# 可以同时合并多条命令
$ docker ps -ql
$ docker ps -q -l
# 查看日志
$ docker logs <container ID>
# --follow
$ docker logs 82 -f
# --tail
$ docker logs 82 -f -n 10
# polite shutdown(传递一个关闭的信号)
$ docker stop 49
# 强制关闭
$ docker kill 82 48
后台运行的容器
$ docker run -ti ubuntu
root@3cc1d9fcadda:/# top
# 退出容器
^p^q
# 重新进入容器
$ docker attach 34
# 或者用个 子命令
$ docker attach $(docker ps -ql)
# 如果想要进入容器输入内容的话使用docker attach
# 如果只是要查看容器内的输出的内容话最好使用docker logs,如果进入容器看日志后使用了^c实际上是停止了容器
$ docker logs --tail 1 --follow $(docker ps -ql)
# 重启停止的容器
$ docker start <containerID>
2. 构建容器镜像
简单介绍
一个容器包含一个底层的只读的镜像层和一个上层的可读可写的容器层 使用了copy-on-write技术加快启动时间 多个容器共享一个底层的镜像层,只需要根据需求修改上层的读写层即可 如果确认修改了可以在此基础上再创建一个image
$ docker commit
$ docker build
$ docker search marathon
# version tag
$ docker pull debian:jessie
实际操作
# 查看新装了什么内容
$ docker diff <containerID>
# 使用修改后的容器新建一个镜像
$ docker commit <containerID>
# 为新镜像起名
$ docker tag ab580f989221 myfiglet
# 直接使用新镜像
$ docker run myfiglet figlet hello
# 可以在创建时直接起名
$ docker commit ab580f989 newfiglet
$ docker run -ti newfiglet
写Dockerfile
FROM ubuntu
RUN apt-get update
RUN apt-get install figlet
$ docker build -t figlet .
# 不使用缓存
$ docker build --no-cache ...
# 查看镜像的所有层的内容
$ docker history figlet
使用CMD
和ENTRYPOINT
注意要使用json syntax
FROM ubuntu
RUN apt-get update
RUN ["apt-get", "install", "figlet"]
ENTRYPOINT ["figlet", "-f", "script"]
CMD ["hello world"]
$ docker build -t myfiglet .
$ docker run myfiglet
# 重写了cmd保留了entrypoint
$ docker run myfiglet hola mundo
# 重写entrypoint
$ docker run -it --entrypoint bash myfiglet
参考资料
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。