《我的第一本docker书》
创建管理容器
- docker info # 查看程序是否存在,功能是否正常
- man docker-run
- docker help run
- docker run -i -t ubuntu:14.04 /bin/bash # 创建新容器
-i 标志容器中STDIN是开启的,-t 创建一个伪tty
[docker会先检查本地是否有ubuntu镜像,没有的话会连接官方维护的Docker Hub Registry查看Docker Hub中是否存在该镜像]
{主机的控制台附着到新的shell会话上} - docker ps -a
- docker ps -l
- exit
- docker start container_name
- docker attach ID/name /bin/bash #进入一个容器,但attach并不好用,它进入的容器当关闭时会在不同的终端同时操作
docker exec -it ID/name /bin/bash #推荐进入容器的命令
docker rm name 删除容器
- docker rmi 镜像id 删除镜像
创建守护式容器
- docker run –name fox -d ubuntu:14.04 /bin/sh -c “while true; do echo hello world; sleep 2; done”
-d 放在后台运行 ;循环打印hello world
{仅仅返回一个容器id,没有讲主机控制台附在新的shell上} docker stop fox/container_id 停止一个守护式容器
docker logs fox 获取容器的日志
- docker logs -f fox 查看日志尾部
- docker logs -ft fox 加上时间戳
- docker logs –tail 10 fox 查看最后10行
- docker logs –tail 0 -f fox 跟踪最新的日志
ctrl + c 退出日志
docker exec -d fox touch /etc/new_file
- exec在容器内部额外启动新进程
docker exec -t -i fox /bin/bash 在fox内创建一个新的bash会话,可以在这个容器中运行其他命令
docker run –restart=always –name fox2 -d ubuntu:14.04 /bin/sh -c “while true;do echo hello;sleep 2;done;” 自动重启容器
docker inspect fox2 对容器做详细检查,返回配置信息
- docker inspect –format ‘{{ .State.Running }}’ fox2 查看指定参数
使用镜像和仓库
- docker images 列出所有镜像
- docker images image_name 查看指定镜像名
本地镜像都保存在docker宿主机的/var/lib/docker 目录下
root的文件系统永远是只读, 写时复制 - docker search image_name 在Docker Hub搜索镜像
- docker pull 用户名/仓库名 拉取镜像到本地
- docker run -it puppet/puppetserver /bin/bash构建一个容器
- docker commit 构建镜像(不推荐)
docker build 和Dockerfile文件 构建镜像(推荐)【编写dockerfile之后执行docker build】
(1) commit 方法创建镜像
在容器里安装一个Apache, docker commit 容器id 镜像仓库/镜像名 eg: docker commit … sunnily/apache2
docker commit -m “A new custom image” –author=”Amy” 966656ed5bdf sunnily/apache2:webserver
-m 提交信息 –author镜像作者信息 :webserver添加镜像的标签
(2)build创建镜像
mkdir static_web -> cd static_web -> touch Dockerfile
“””
Version: 0.0.1 注释
FROM ubuntu:14.04 基础镜像
MAINTAINER Amy “sunny_lyr@163.com” 镜像的作者和邮件地址
RUN apt-get update
RUN apt-get install -y nginx
RUN echo ‘Hi, I am in upir container’ > /usr/share/nginx/html/index.html
EXPOSE 80 告诉docker该容器内的应用程序将会使用容器的指定端口
“””
cd static_web -> docker build -t=”sunnily/static_web:v1” . 仓库名/镜像名:标签
docker run -d -P 80 –name static_web sunnily/static_web nginx -g “daemon off” 从新镜像启动容器
docker port 容器id 容器端口号 容器的端口映射情况docker指令
CMD 指定一个容器启动时要运行的命令
Dockerfile中只能指定一条CMD,如果指定了多条,会执行最后一句
ENTRYPOINT 类似CMD, 不容易在启动容器时被覆盖
…从容器安装Registry
docker run -p 5000:5000 registry
在测试中使用docker
- 在nginx的配置文件中,daemon off;选项阻止Nginx进入后台,强制其在前台运行,这是因为要想保持Docker容器的活跃状态,需要其中运行的进程不能中断。