docker
命令总结
docker 守护进程
systemctl status docker
systemctl start docker
systemctl stop docker
docker 入门
# 显示所有容器和镜像的数量,及基本配置
docker info
# -i 保证stdin是开启的
# -t 为创建的容器分配一个伪tty终端
docker run -i -t ubuntu /bin/bash
docker run --name container_name -i -t ubuntu /bin/bash
# 查看当前系统中的容器列表
docker ps -a
# 查看正在运行的容器
docker ps
# 删除容器
docker rm container_name
docker rm `docker ps -a -q` # 删除所有容器。 -q 只返回容器ID
# 重启已经停止的容器
docker start/restart container_name
# 附着到容器的shell(之前使用docker run 指定了shell参数)
docker attach container_name
# 退出
exit
创建守护式容器
没有交互式会话,长时间运行
# -d docker会将容器放到后台运行
docker run --name daemon_dave -d ubuntu /bin/sh -c "while true;do echo hello world; sleep 1; done"
# 获取容器日志
docker logs container_name
docker logs -f container_name
# 查看容器内的进程
docker top container_name
# 在容器中启动新进程
# -d 表明要运行一个后台进程
docker exec -d container_name touch /ect/new_config_file
# 打开一个交互式shell任务
docker exec -t -i container_name /bin/bash
# 停止守护容器
docker stop container_name
# 显示最后x个容器
docker ps -n x
# 自动重启容器
# always 无论退出代码是什么,总是重启
# on-failure 当退出代码非0时,自动重启, on-failure:5,可重启次数
docker run --restart=always --name container_name -d ubuntu /bin/sh -c "while true;do echo hello world; sleep 1; done"
# 获取更多容器信息
docker inspect container_name
docker 镜像和仓库
# 列出主机上的可用镜像
docker images
# 拉取指定镜像库中的所有内容
docker pull ubuntu
# 带标签的docker镜像
docker run -t -i --name container_name ubuntu:12.04 /bin/bash
# 只查看某个镜像的内容
docker images ubuntu/ubuntu:20
# 查找Docker Hub上的镜像
docker search puppet
构建镜像
docker commit
- 在镜像中作出修改,将修改提交为一个镜像
docker run -i -t ubuntu /bin/bash
apt-get -yqq update
apt-get -y install apache2
docker commit container_name godsleft/apache2
docker commit -m="new image" --author="godsleft" container_name godsleft/apache2:webserver
Dockerfile 构建镜像
# 此目录便是构建上下文,里面Dockerfile
mkdir static_web
cd static_web
# -t 为新镜像指定了仓库和名称
docker build -t="godsleft/static_web:v1"
# 探求镜像如何构建出来
docker history image_name
# 启动一个新容器
docker run -d -p 80 --name static_web godsleft/static_web nginx -g "daemon off;"
docker run -d -p 8080:80 --name static_web godsleft/static_web nginx -g "daemon off;"
docker run -d -p 127.0.0.1:8080:80 --name static_web godsleft/static_web nginx -g "daemon off;"
docker run -d -p 127.0.0.1::80 --name static_web godsleft/static_web nginx -g "daemon off;"
docker run -d -P --name static_web godsleft/static_web nginx -g "daemon off;"
# 查看端口映射情况
docker ps -l
docker port container_name 80
上传镜像
docker push godsleft/static_web
删除镜像
# 注意删除镜像和删除容器是不同的
docker rmi godsleft/static_web
Dockerfile 文件
常用指令
FROM #指定一个基础镜像
MAINTAINER #镜像作者以及电子邮件
RUN #使用/bin/sh -c 来执行
EXPOSE #告诉容器,将会使用容器的指定端口
CMD #容器被启动时,要运行的命令,docker run 会覆盖改指令,只能指定一条CMD指令
ENTRYPOINT #docker run指定的参数再次传递给ENTRYPOINT
WORKDIR #在容器内指定一个工作目录,docker run -ti -w /var/log...
ENV #设置环境变量,持久
USER #基于该镜像启动的容器以什么用户运行,默认用户root
VOLUME #向容器添加卷,容器间可以共享
ADD #将构建上下文中的文件和目录复制到镜像中
COPY #只关心复制,不做文件提取和解压
ONBUILD #触发器,作为其他镜像的基础镜像时
RUN ["apt-get", " install", " -y", "nginx"]
docker build
构建镜像指令
docker build
-t #指定生成镜像的名称
# 例子
docker build -t godsleft/static_web .
docker run
从一个指定的镜像运行起来一个容器
docker run
-w #覆盖workdir
-e #传递环境变量
-u #覆盖user指令
-v #指定宿主主机目录作为卷挂载到容器中
-p #公开端口
-h #设置容器的主机名
--name #指定容器名称
--link #创建两个容器之间的父子链接
--volumes-from #将指定容器里的所有卷加入新创建的容器里
--rm #创建用完即扔的容器
# 例子
# -v rw ro 指定目的目录的读写状态
docker run -d -p 80 --name website -v $PWD/website:/var/wwww/html/website:ro godsleft/nginx nginx
# --link redis:db db是redis容器的别名
docker run -p 4567 --name webapp --link redis:db -t -i -v $PWD/webapp:/opt/webapp godsleft/sinatra /bin/bash
其他
- /var/lib/docker
- /var/lib/docker/containers:所有容器都保存在该目录下
- 配置信息只有一个/root/.docker/config.json
- 容器构建于镜像之上
- docker rmi -f `docker images | awk ‘/docker.io/redis/ {print $3}’` 由于一不小心,将所有的redis镜像下载了,删除办法
非常有用的几个docker命令
# 连接后台运行的docker容器
docker exec -t -i <runing_container_name> /bin/bash
# 在后台运行的docker容器中执行命令
docker exec <runing_container_name> bash -c "java -cp /tmp/bin/*.jar com.left.App"
fig
简单命令
pip install -U fig #安装fig
fig up -d #后台
fig ps
fig help ps
fig logs #显示日志
fig stop #停止服务
fig kill #如果上面命令无用
fig start #再次启动
fig rm #删除服务
consul
- 当初以为是一个docker的服务,后来发现是一个服务发现与注册的工具,不属于docker的内容
- docker + consul + consul-template + nginx 做高可用的服务