Docker 基本操作
创建时间:2017-10-03 23:38
字数:1.6k
早先学习一些集群知识, 都是用虚拟机, 后来又用了 vagrant, 都相当耗资源,直到遇见了 docker ……
安装 安装Docker维护的版本 1 curl -sSL https://get.docker.com | sudo
1 2 3 4 5 6 7 8 9 10 11 12 If you would like to use Docker as a non-root user, you should now consider adding your user to the "docker" group with something like: sudo usermod -aG docker your-user or: sudo groupadd docker sudo gpasswd -a ${USER} docker sudo service docker restart 需要注销重新登录
容器操作 启动一个容器 1 2 3 4 5 docker run -i -t IMAGE [COMMAND] [ARG...] -i interactive=true | false 默认是 false -t --tty = true | false 默认是false 开启一个终端
启动一个守护式容器 1 2 3 4 5 6 7 8 9 # 1.先启动一个交互式容器,然后按下 Ctrl+P Ctrl+Q docker run -i -t IMAGE /bin/bash # 2. 直接启动守护式容器(推荐) docker run -d 镜像名 [command] [arg...] -d 表示后台执行容器中的命令,执行完后会容器会退出转为stop状态 如果想保持容器一直运行,就需要保持容器中前台有一个程序一直运行,比如 top,tail等等 docker run --name=zj -d [image] /bin/sh -c "while true; do echo hello > /dev/null; sleep 10; done"\
附加到运行中的容器
查看容器 1 2 3 4 5 6 docker ps [-a] [-l] 无选项 查看正在运行的容器 -a 查看所有的容器 -l 查看最近的容器 docker inspect [容器的id或者容器的名字]
自定义容器名 1 docker run --name=自定义名 -i -t IMAGE /bin/bash
重新启动停止的容器
删除已经停止的容器
查看容器日志 1 2 3 4 docker logs [-f] [-t] [--tail] 容器名 -f --follows=true | false 默认为false 一直跟踪日志的变化并返回结果 -t --timstamps=true | false 默认为false 返回的结果前加上时间戳 --tail="all" 不指定则返回所有的日志
查看容器内的进程
在运行中的容器中启动新进程 1 2 3 4 docker exec [-d] [-i] [-t] 容器名 [command] [arg...] -d -i -t
停止守护式容器 1 2 3 docker stop 容器名 (发送一个kil命令,等待停止) docker kill 容器名 (快速结束容器,不等待)
删除所有容器 1 docker rm $(docker ps -aq)
自定义 hostname 和 hosts 1 2 # 运行容器时 加 -h [hostname] , 加 --add-host=[host:ip] docker run --name=cdh-4 -h chd-04 --add-host=cdh-04:172.17.0.5 waterandair/centos7-ssh /usr/sbin/sshd -D
镜像操作 列出镜像 1 2 3 4 5 docker images [OPTIONS] [REPOSITORY] -a, --all=false 显示所有镜像 默认不显示中间层镜像 -f, --filter=[] 显示时的过滤条件 --no-trunc=false 不使用截断的形式显示数据 -q, --quiet=false 只显示镜像id
查看镜像详细信息 1 docker inspect [OPTIONS] CONTAINER | IMAGE [CONTAINER | IMAGE]
删除镜像 1 2 3 4 5 6 7 8 9 10 docker rmi [OPTIONS] IMAGE [IMAGE...] -f, --force=false Force removal of the image --no-prune=false Do not delete untagged parents eg. docker rmi ubuntu:14.04 # 删除resository 为 ubuntu 的所有镜像 docke rmi $(docker images -q ubuntu)
查找镜像 1 2 3 4 docker search [OPTIONS] TERM -automated=false Only slow automated builds --no-trunc=false Don't truncate output -s, --stars=0 Only displays with at least [num] stars
拉取镜像 1 2 3 4 5 6 7 docker pull [OPTIONS] NAME [:TAG] -a, --all-tags=false Download all tagged images in the repository 修改获取镜像地址: 使用 --registy-mirror 选项 1. 修改: /etc/default/docker 2. 添加: DOCKER_OPTS= "--registy-mirror=https://www.daocloud.io"
构建镜象 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 docker commit 通过容器构建 docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] -a, --author="" Author -m, --message="" Commit message -p, --pause=true Pause container during commit docker build 通过 Dockerfile 文件构建 docker build [OPTIONS] PATH --force-rm=false --no-cache=false 不使用缓存 --pull=false -q, --quiet=false --rm=true -t, --tag="" 创建一个Dockerfile # First Dockerfile FROM ubuntu:14.04 MAINTAINER zj "zj@zj.com" RUN apt-get update RUN apt-get install -y nginx EXPOSE 80
查看镜像构建的过程
提交自己的镜像到 docker hub 1 docker push username/imagename[:tag]
修改镜像的tag 1 docker tag username/imagename[:tag] username/imagename[:tag]
Docker 容器网络 http://www.atjiang.com/docker-single-host-network-exposure/
网桥 网桥是基于OSI七层模型中的数据链路层的 特点:
1 2 3 4 5 docker0 默认的地址划分 IP: 172.17.42.1 子网掩码: 255.255.0.0 MAC: 02:42:AC:11:00:00 到 02:42:ac:11:ff:ff 总共提供了 65534 个地址
网桥管理工具: 1 sudo apt-get install bridge-utils && brctl show
修改docker0 地址: 1 sudo ifconfig docker0 192.168.200.1 netmask 255.255.255.0
添加虚拟网桥: 1 2 3 4 5 6 7 sudo brctl addbr br0 sudo ifconfig br0 192.168.100.1 netmask 255.255.255.0 # 更改 docker 守护进程的启动配置 /etc/default/docker 中添加 DOCKER_OPS 值 -b = br0
启动容器关于网络的选项 1 2 3 4 5 6 --link 给容器设置一个host别名 docker run --link=[CONTAINER_NAME]:[ALIAS] [IMAGE] [COMMOND] --icc=false 拒绝所有容器间互联 --iptables=true 添加防火墙 --ip-forward=true # sysctl net.ipv4.conf.all.forwarding
获取容器的ip地址 1 2 3 4 5 6 7 docker inspect --format='{{.NetworkSettings.IPAddress}}' $CONTAINER_ID 获取 ip hostname docker inspect --format='{{.NetworkSettings.IPAddress}} {{.Config.Hostname}}' app1 获取容器ip 和对应的 name docker inspect --format='{{.NetworkSettings.IPAddress}} {{index (split .Name "/") 1}}' $(docker ps -aq)
数据卷 数据卷的特点
数据卷再容器启动时初始化,如果容器使用的镜像在挂载点包含了数据,这些数据会拷贝到新初始化的数据卷中
数据卷可以再容器之间共享和重用
可以对数据卷里的内容直接进行修改
数据卷的变化不会影响镜像的更新
卷会一直存在,即使挂载数据卷的容器已经被删除
为容器添加数据卷 1 2 这是命令行的方式,docker 更推荐使用 数据卷容器 的方法 sudo docker run -v ~/local_data:/container_data -it ubuntu /bin/bash
为数据卷添加访问权限 1 sudo docker run -v ~/datavolume:/data:ro -it ubuntu /bin/bash
使用 dockerfile 构建包含数据卷的镜像
挂载数据卷容器 命名的容器挂载数据卷,其他容器通过挂载这个容器实现数据共享,挂载数据卷的容器,就叫做数据卷容器。
1 2 docker run --volumes-form [CONTAINER NAME] 数据卷容器仅仅起传递配置的作用
文章标题: Docker 基本操作
文章字数: 1.6k
本文作者: Waterandair
发布时间: 2017-10-03, 23:38:00
最后更新: 2019-12-28, 14:03:59
原始链接: https://waterandair.github.io/2017-10-03-docker-base-use.html
版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。