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