docker简单教程

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 做高可用的服务

你可能感兴趣的:(DevOps)