docker-基础命令

docker 容器, 只能启动一个指定的程序, 程序结束, 容器退出

查看命令: docker --help

   docker run --name centos -d -h centos --rm -v /opt/:/opt/ wenbronk/centos /bin/bash

总得来说, docker的命令为以下几种: 

  • 容器生命周期管理 — docker [run|start|stop|restart|kill|rm|pause|unpause]
  • 容器操作运维 — docker [ps|inspect|top|attach|events|logs|wait|export|port]
  • 容器rootfs命令 — docker [commit|cp|diff]
  • 镜像仓库 — docker [login|pull|push|search]
  • 本地镜像管理 — docker [images|rmi|tag|build|history|save|import]
  • 其他命令 — docker [info|version]

1, 镜像操作: 

1, 搜索镜像
docker search alpine
2, 下载镜像
docker pull apline
3, 查看镜像
docker images
4, 删除镜像
docker rmi apline

2, 容器操作

1), 启动容器: 

a), 输出hellowork, 运行后立马退出

docker run centos /bin/echo 'helloworld'

b), 打开终端并保持在容器中

docker run --name centos -d -it centos /bin/bash

参数解释:   --name: 指定运行名字, 

       --i: 始终保持链接状态

       -t: 打开伪终端并绑定在docker上

      /bin/bash: 需要执行的命令

运行的时候, 会先检测有没有镜像, 没有的话自动pull下载

c), 后台运行:  加 -d

d), 端口映射: 不加的话, 随机映射, 使用: 

         -p 主机端口:容器端口

docker run -d --name nginx -p 81:80 nginx

    使用 -p ip:hostPort:containerPort 可以指定主机的多个ip:port

    也可以使用 -p 指定多个 端口

2, 停止容器

docker stop CONTAINER_ID | CONTAINE_NAME

3, 查看容器

docker ps -a  # -a指查看所有, 不加只查看正在运行的

4, 进入容器

docker exec -it /bin/bash CONTAINER_NAME 
docker attach CONTAIN_ID: 进入后退出, 容器会退出

 -i: 始终打开链接

   -t: 打开伪终端使用绑定在docker上

   /bin/bash: 需要docker容器运行的命令

使用更好的方式进入容器

需要工具包:

yum install -y util-linux

查看docker 的pid

docker inspect --format "{{.State.Pid}}" CONTAINER_ID | CONTAINER_NAME

使用 nsenter 进入容器

nsenter --target 23907 --mount --uts --ipc --net --pid

写成脚本链接进容器: 

# /bin/bash
CNAME=$1
if [ ! -n "$1" ]; then
echo the param CONTAINER_ID or CONTAINER_NAME is must
exit 0
fi

CPID=$(docker inspect --format "{{.State.Pid}}" $CNAME)
nsenter --target "$CPID" --mount --uts --ipc --net --pid

5, 启动已经终止的程序

docker start CONTAIN_ID

6, 删除容器

docker rm

7, 保存正在运行的容器 

docker commit -m 'yourtags' CONTAINER_ID wenbronk/CONTANER_NAME

 

3, docker数据管理

  数据卷是经过特殊设计的容器, 可绕过联合文件系统(UTS), 为一个或多个容器提供服务

  目的是数据的永久化, 完全独立于容器生命周期, 不会存在类似垃圾回收机制

  数据卷容器: --volumes-

  数据卷: -v /data     -v src:dst: 将数据直接写在物理机上, 也可以挂载文件到容器中

    可添加 -v /data:/opt/nginx/log:ro   添加 ro 参数 使得容器内只读

可通过 docker inspect CONTAINER_ID 查看是否挂载数据卷

1, 挂载目录或文件, 到docker 容器中 

docker run -d --name=tomcat -v /b2b:/test -it centos /bin/bash

 此时操作本地的 /b2b 目录, 就会在docker容器下看到 相应的文件管理

会自动创建  /b2b目录

 2, dockerfile种创建数据卷

dockerfile中使用 [VOLUME] 挂载数据卷, 但不可以是本地存在的, 启动时会创建相同名字的数据卷

相同镜像的不同容器, 创建的数据卷不同, 因此使用数据卷容器

3, 可以使用 volumes-from参数, 将docker容器启动为数据卷容器

  命名的容器挂载数据卷, 其他容器通过挂载容器挂载数据卷, 

 

# 启动一个容器作为数据卷容器
docker run -it -v /b2b:/test --name dataTest centos /bin/bash
# 启动两外两个容器链接数据卷
docker run -it --volumes-from dataTest --name db1 centos
docker run -it --volumes-from dataTest --name db2 centos

这样 db1 和 db2 都可以访问该目录, 且做的更改对其他容器是可见的

即使删除了容器  dataTest, db1, 和db2 也可以正常进行数据共享, 数据卷容器的存在仅仅为了配置信息传递

避免暴露服务器真是路径

4, 数据备份和恢复

备份

docker run --volumes-from dbdata -v $(pwd):/backup --name worker centos tar zcf /backup/backup.tar.gz /dbdata

创建数据卷容器: 

docker run -v /dbdata/dbdata --name db centos /bin/bash

进行数据恢复

docker run --volumes-from db -v $(pwd):/backup  centos tar xf /backup/backup.tar.gz

 

posted @ 2018-03-03 17:36  bronk  阅读(238)  评论(0编辑  收藏  举报