容器的基本操作
启动容器
命令:docker run IMAGE [COMMAND] [ARG...]
- IMAGE:启动容器所使用的操作系统镜像
- COMMAND: 运行的命令
- AGR: 对应参数
- 例如:
docker run ubuntu echo 'Hello World'
- 这是一个执行单词命令的容器
启动交互式容器
命令:docker run -i -t IMAGE /bin/bash
- -i告诉docker守护进程为容器始终打开标准输入
- -t告诉为创建的容器分配一个伪tty终端
- 例如:
docker run -i -t ubuntu /bin/bash
- 输入exit退出这个bash
查看容器
命令: docker ps [-a] [-l]
- -a指列出所有容器
- -l列出最新创建的一个容器
- 如果没有参数返回正在运行的容器
结果的各参数含义:
- container Id:docker守护进程在启动容器时为容器分配的唯一id
- names:docker守护进程为容器自动分配的名字
- IMAGE: 所使用的操作系统镜像
- COMMAND: 运行的命令
- CREATED: 创建时间
命令: docker inspect 容器名
- 容器名既可以是id,也可以是name.
- 返回配置信息
自定义容器名
命令:docker run --name=自定义名 -i -t IMAGE /bin/bash
ordocker run --name 自定义名 -i -t IMAGE /bin/bash
- 例如:
docker run --name=container01 -i -t ubuntu /bin/bash
重新启动停止的容器
命令:docker start [-i] 容器名
- -i参数以交互的方式重新启动
删除停止的容器
命令:docker rm 容器名
docker守护式容器
什么是守护式容器
- 能够长期运行
- 没有交互式会话
- 适合运行应用程序和服务
以守护形式运行容器
命令: docker run -i -t IMAGE /bin/bash
Crtl+P+Q退出bash使得容器在后台运行
附加到运行中的容器:
命令: docker attach 容器名
启动守护式容器(重要方式):
命令: docker run -d IMAGE [command] [arg...]
- -d 告诉run命令启动容器时使用后台的方式,命令结束后容器依旧停止
- 返回的值的是docker守护进程分配给容器的唯一id
查看容器日志
命令: docker logs [-f] [-t] [--tail] 容器名
- -f告诉logs一直跟踪日志变化并返回 crtl+C停止
- -t在返回的结果上加上时间戳
- —tail选项是返回结尾处多少数量的,不加返回所有日志
查看容器内进程
命令: docker top 容器名
在运行的容器中启动新进程
命令:docker exec [-d][-i][-t] 容器名[COMMAND][ARG...]
停止守护式容器
命令:docker stop 容器名
or docker kill 容器名
stop发送一个信号给容器,等待容器的停止
kill直接停止容器
在容器中部署静态网站
设置容器的端口映射
命令:run [-P] [-p]
- -P为容器暴露的所有端口进行映射
如:docker run -p -i -t ubuntu /bin/bash
- -p指定映射哪些容器端口
指定容器端口,宿主机端口随机映射:docker run -p 80 -i -t ubuntu /bin/bash
同时指定容器和宿主机端口:docker run -p 8080:80 -i -t ubuntu /bin/bash
指定ip和容器端口:docker run -p 0.0.0.0:80 -i -t ubuntu /bin/bash
指定ip宿主机端口容器端口:docker run -p 0.0.0.0:8080:80 -i -t ubuntu /bin/bash
Nginx部署
创建映射80端口的交互式容器
docker run -p 80 --name web -i -t ubuntu /bin/bash
安装Nginx
apt-get install -y nginx
安装文本编辑器vim
apt-get install -y vim
创建静态页面
mkdir -p /var/www/html
cd /var/www/html
vim index.html
修改nginx配置文件
vim /etc/nginx/sites-enabled/default
把root改为静态网站的位置
运行Nginx
nginx
查看容器端口映射情况docker port 容器名
验证网站访问
浏览器打开: 主机ip:端口
Docker镜像
查看和删除镜像
查看docker存储驱动和存储位置
命令:docker info
列出镜像
列出镜像
命令: docker images [option] [REPOSITORY]
- 无参数显示所有镜像详细信息
- +仓库名返回对应所有镜像
- -a,—all=false 所有镜像
- -f,—filter=[] 显示时过滤条件
- —no-trunc 指定不使用阶段的方式显示数据
- -q,—quit=false 只显示镜像唯一id
返回信息:
- REPOSITORY:镜像所属仓库名(一系列镜像的集合)
- TAG:镜像标签名(默认使用latest对应的镜像)
- IMAGEID: 镜像唯一id(截断过)
- CREATED: 镜像创建时间
- VIRTUAL: 镜像大小
查看镜像的详细信息
命令: docker inspect [options] container|image [container|]
- -f,—format=””
例如:docker inspect ubuntu:latest
删除镜像
命令: docker rmi [options] IMAGE [image…]
- -f,—force=false 强制删除镜像
- —no-prune=false 保留删除镜像中未打标签的父镜像
例如:docker rmi ubuntu:14.04
例如:docker rmi ${docker images -q ubuntu}
删除仓库中所有镜像
注意一个镜像可能会有多个tag
获取和推送镜像
查找镜像
docker Hub https://registry.hub.docker.com
使用前要注册dockerhub
命令: docker search [options] term
- —automated=false 只显示自动化构建出的镜像
- —no-trunc=false 不以截断的方式输出
- -s,—star=0 限定显示结果的最低星级
例如: docker search ubuntu
拉取镜像
命令: docker pull [options] name:[:tag]
- -a,—all-tags=false 把仓库中所有匹配到的镜像下载到本地
推送镜像
命令: docker push name[:TAG]
构建Docker镜像(保存对容器的修改并再次使用)
使用commit 构建镜像
命令:docker commit [options] container [repository [:TAG]]
- -a,—author=”” 指定作者
- -m,—message=”” 镜像构建的信息
- -p,—pause=true 暂停正在运行的容器
例如: docker commit -a ccc -m ‘nginx’ commit_test(容器) xxx/commit_test1(镜像名)
使用build构建镜像
命令: docker build 通过Dockerfile文件构建
创建dockerfile文件
1 | # first Dockerfile for test |
使用docker build [options] PATH|URL|-
进行构建
- —force-rm=false
- —no-cache=false
- —pull=false
- -q,—quiet=false
- —rm=true
- -t,—tag=”” 指定构建出镜像的名字
例如:docker build -t='jxhacker/df_test1' .
docker的C/S模式
dockers的C/S模式 remote API
- restful风格API
连接方式
- unix:///var/run/docker.sock(默认是客户端与守护进程通信方式)
- tcp://host:port
- fd://socketfd
连接socket:nc -U /var/run/docker.sock
- -U指明使用socket
docker守护进程的配置和操作
查看守护进程
命令: ps -ef|grep docker
命令: sudo status docker
or systemctl status docker
使用service命令管理
命令:
sudo service docker start
sudo service docer stop
sudo service docker restart
docker的启动选项
命令:
docker -d [options]
- -D,—debug=false
- -e,—exec-driver=”native”
- -g,—graph=”/var/lib/docker”
- —icc=true
- -l,—log-level=”info”
- —label=[]
- -p,—pidfile=”var/run/docker.pid”
dcoker启动配置文件
位置:/etc/default/docker
Docker的客户端与守护进程的远程访问
- 第二台安装Docker的服务器
- 修改Docker守护进程启动选项,区别服务器(/etc/default/docker添加DOCKER_OPTS=”-label_name = docker_server_1”)
- 保证ClientAPI和ServerAPI版本一致
修改服务器端配置
/etc/default/docker添加DOCKER_OPTS=”-label_name = docker_server_1 -H tcp://0.0.0.0:2375”
另一台主机访问
curl http://xx.xx.xx.xx:2375/info
修改客户端配置
docker -H tcp://xx.xx.xx.xx:2375 info
也可以使用环境变量DOCKER_HOSTexport DOCKER_HOST="tcp://xx.xx.xx.xx:2375"
使用完置空那个环境变量export DOCKER_HOST=""
docker容器的网络网络基础
Linux虚拟网桥
- 可以设置ip地址
- 相当于拥有一个隐藏的虚拟网卡
docker修改docker0地址
命令: ifconfig docker0 192.168.200.1 netmask 255.255.255.0
自定义虚拟网桥
添加虚拟网桥
- sudo brctl addr br0
- sudo ifconfig bro 192.168.100.1 netmask 255.255.255.0
更改dockers守护进程的启动配置
- /etc/default/docker 中添加DOCKER_OPTS值
- -b=br0
docker 容器的互联
docker运行容器互相连接
--icc=true
docker运行容器互相连接
所有容器间连接
--link
所有容器间连接
命令:docker run --link=[container_name]:[alias] [image] [command]
例如:docker run -it --name cct3 --link=cct1:webtest jxhacker/cct
这种方式即时重新启动容器ip改变还是能互联
运行特定容器间的连接
- icc=false —iptable=true
- —link
这样就仅仅允许通过link配置的访问docker 容器与外部网络的连接
ip_forward系统是否转发流量
ip-forward=true
守护进程启动时,设置系统的ip_forwardsysctl net.ipv4.conf.all.forwarding
查看数据转发是否开启iptables过滤防火墙系统
filter表中包含的链 - INPUT
- FORWARD
- OUTPUT
例如:sudo iptables -t filter -L -n
容器的数据管理
docker容器的数据卷
什么是数据卷
docker数据卷是经过特殊设计的目录,可以绕过联合文件系统,为一个或多个容器提供访问,它存在的目的在于数据的永久化,它完全独立于容器的生命周期,因此,Docker不会再容器删除时删除挂载的数据卷,也没有类似垃圾回收机制对容器引用的数据卷进行处理。
特点:
- 数据卷在容器启动时初始化,如果容器使用的镜像在挂载点包含了数据,这些数据会拷贝到新初始化的数据卷中
- 数据卷可以在容器之间共享重用
- 可以对数据卷中的数据直接修改
- 数据卷的变化不会影响镜像的更新
- 卷一直存在,即使挂载数据的容器已经被删除
为容器添加数据卷
命令: sudo docker run -v ~/container_data:/data -it ubuntu /bin/bash
- -v指定数据卷在本机文件系统中的目录和在容器中映射的目录名
例如:docker run -it -v ~/datavolumn:/data ubuntu /binbash
为数据卷添加访问权限
命令: docker run -v ~/datavolumn:/data:ro -it ubuntu /bin/bash
- 只读权限
使用dockerfile构建包含数据卷的镜像
- dockerfile指令:
VOLUMN['/data']
构建完成后:docker run --name dvt3 -it jxhacker/dvt
其本地的docker路径自动创建
docker的数据卷容器
什么是数据卷容器
命名的容器挂载数据卷,其他容器通过挂载这个容器实现数据共享,挂载数据卷的容器叫数据卷容器
使用数据卷容器
命令:docker run --volumns-from [CONTAINER NAME]
- —volumns-from指定新建容器所指定的数据卷容器
- [CONTAINER NAME]已经挂载数据卷的容器的容器名
例如:
docker run -it --name dvt4 jxhacker/dvt
docker run -it --name dvt5 --volumn-from dvt4 ubuntu /bin/bash
dockers数据卷备份与还原
数据备份方法
命令:
docker run --volumes-from [container name] -v $(pwd):/backup ubuntu
tar vcf /backup/backup.tar [container data volumn]
例如:
docker run --volumes-from dvt5 -v ~/backup:/backup:wr --name dvt10 ubuntu tar cvf /backup/dvt5.tar /datavolumne1
数据还原方法
docker run --volumes-from [container name] -v $(pwd):/backup ubuntu
tar xvf /backup/backup.tar [container data volumn]