docker基础命令

作者:Garany 发布于:2017-07-14 分类:破万卷书
一、Docker 包括三个基本概念
镜像(Image) 相当于包含了完整的一套最小系统的root文件系统。
容器(Container) 容器是镜像运行时的实体,可以被创建、启动、停止、删除、暂停等
仓库(Repository) 通过 <仓库名>:<标签> 的格式来指定软件具体的版本。如果不给出标签,将以  latest  作为默认标签。

二、Docker 安装
1.阿里云脚本安装
# curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -

2.手动安装
# vim /etc/sysctl.conf \\添加内核参数
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
# sysctl -p
# vim /etc/yum.repos.d/docker.repo \\添加 yum 源
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
# yum update \\更新yum源
# yum install docker-engine \\安装docker-engine
# systemctl enable docker \\添加开机启动
# systemctl start docker \\启动 Docker
3.添加镜像加速器
# vim /etc/systemd/system/multi-user.target.wants/docker.service
在ExecStart=/usr/bin/dockerd 行后添加加速器地址
  ExecStart=/usr/bin/dockerd --registry-mirror=https://8rq5sk0r.mirror.aliyuncs.com
# systemctl daemon-reload \\重新加载配置文件
# systemctl restart docker
# ps aux |grep docker \\检查加速器,查看是否有--refistry参数

三、镜像
1.获取
# docker pull centos
# docker pull centos:6.8
2.列出
# docker images
# docker images -a
# docker images centos
# docker images centos -q \\查看centos镜像的ID
# docker images -f dangling=true
# docker images -f since=centos
# docker images -f before=centos
# docker images -f label=com.example.version=0.1
3.运行
# docker run -it centos:6.8 bash
# cat /etc/issuee
# exit
# docker ps 
4.删除(只有没有被引用的镜像才能被删除)
# docker rmi $images_ID
# docker rmi $(docker images -q) \\删除全部镜像
5.保存
# docker save docker-tomcat |gzip >docker-tomcat.tar.gz
6.导入
# docker load -i docker-tomcat.tar.gz

四、容器
1.查看
# docker ps
# docker ps -a \\查看所有容器,包括已经停止的
2.运行
# docker run $container_ID
# docker run centos:6 echo 'Hello world' \\输出“Hello World”,之后终止容器
# docker run -it centos:7 bash \\启动容器,允许用户进行bash交互
-t  分配一个伪终端(pseudo-tty)并绑定到容器的标准输入
-i  让容器的标准输入保持打开
# docker run -d centos:7 \\让容器后台运行
# docker attach $container_ID \\获取后台运行的容器
3.停止
# docker stop $container_ID
# docker stop $(docker ps -a -q) \\停止所有的容器
4.启动
# docker start $container_ID \\启动已经停止的容器
# docker restart $container_ID \\重启已经运行的容器
# docker inspect $container_ID \\查看容器的详细信息
5.删除(只有处于停止状态的容器才能被删除)
# docker rm $container_ID
# docker rm -f $container_ID \\删除已经运行的容器
# docker rm $(docker ps -a -q) \\删除所有容器
6.导出、导入容器
# docker export $container_ID > $container.tar \\导出容器快照到本地文件
# cat $container.tar |docker import - $images_name \\从容器快照文件中导入为镜像
# docker import http://example.com/exampleimage.tgz example/imagerepo \\指定 URL或目录导入
*注:既可以使用docker load来导入镜像文件到本地镜像库,也可以使用docker import来导入容器快照到本地镜像库。
区别在于:容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态);镜像存储文件将保存完整记录,体积也要大。此外,从容器快照文件导入时可以重新指定标签等元数据信息。
7.日志
# docker logs $container_ID
# docker logs -f $container_ID \\动态查看


五、Dockerfile 定制镜像
# mkdir /docker
# cd /docker
# vim ./dockerfile
FROM centos:7
 #FROM,表示以哪个 image 作为模板
MAINTAINER garany
 #MAINTAINER,表示作者是谁
RUN rm -rf /etc/yum.repos.d/* \
 #RUN,制作image 过程中,要执行的命令
COPY CentOS-Base.repo /etc/yum.repos.d/
 #COPY,将物理机Dockerfile同一目录的文件,拷贝到 image
COPY wang.tar /root
ADD wang.tar /var
 #将物理机的文件拷贝到镜像并自动解包
ENV package httpd
 #设置一个环境变量,变量名为 package,值为 httpd
RUN yum install -y $package \
 && echo "web1" >> /var/www/html/index.html
EXPOSE 80
 #将容器端口暴露出来,启动容器后使用宿主机的端口来映射
WORKDIR /usr/sbin/
 #cd 到工作目录
CMD ["/usr/sbin/httpd","-D FOREGROUND"]
 #启动容器时所执行的命令.命令、选项、参数,用逗号隔开
 #注意:
#1.每个Dockerfile只能有一条CMD命令,指定多条命令,只有最后一条会被执行
#2.如果用户启动容器时候指定了运行的命令,则会覆盖CMD命令
ENTRYPOINT ["httpd"]
 #指定容器启动是执行的命令,且不会被docker run带的命令覆盖.Dockerfile中只能有一个,指定多个时只有最后一个生效

# docker build -t tomcat-docker ./
# docker images
# docker run --name docker-web -d -p 88:80 tomcat-docker

六、镜像保存、加载
1.保存镜像到本地
# docker save $images |gzip >$images_ID.tar.gz
2.加载本地镜像文件
# docker load -i $images_ID.tar.gz 
3.镜像迁移
# docker save $iamges | bzip2 | pv | ssh user@host 'cat | docker load'

七、仓库
1.新建仓库(192.168.100.223)
1.1下载registry镜像
# docker pull registry
1.2通过该镜像启动一个容器,指定本地目录挂载到容器内的/tmp/registry下,防止容器被删除时容器中的镜像丢失
## docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry
1.3查看 地址为:192.168.112.136:5000的容器
# docker ps

2.修改镜像并上传(192.168.100.222)
2.1pull镜像busybox
# docker pull busybox
# docker images
2.2修改该镜像的tag,新镜像名称必须带有服务器端IP:port
# docker tag busybox 192.168.100.223:5000/busybox
2.3修改ssl
# vim /etc/docker/daemon.json
{"insecure-registries":["192.168.100.223:5000"]}
# systemctl restart docker
2.4上传镜像到私有仓库
# docker push 192.168.100.223:5000/busybox
2.5删除本地镜像,然后从私有仓库中pull该镜像
# docker rmi 192.168.100.223:5000/busybox
# docker pull 192.168.100.223:5000/busybox
3.管理仓库
3.1查询
# curl http://192.168.100.223:5000/v2/_catalog

八、数据卷
1.数据卷
1.1挂载容器的/var目录到主机的目录
# docker run -itd --name centos1 -v /var/ centos
# docker inspect -f {{.Mounts}} centos1 \\查询具体的挂载目录
1.2挂载容器的/var目录到主机的/data/docker/目录
# docker run -itd --name centos2 -v /data/docker/:/var/ centos
1.3挂载主机单个文件到容器
# docker run -itd --name centos3 -v /etc/passwd:/home/wang centos
2.数据共享
2.1创建名字为db的容器来共享数据
# docker run -itd --name db -v /data/docker/:/var/ centos
2.2把db挂载到容器centos1里
# docker run -itd --name centos1 --volumes-from db centos
2.3把db挂载到容器centos2里
# docker run -itd --name centos2 --volumes-from db centos
2.4验证
# mkdir /data/docker/test
# docker exec -it db bash
# mkdir file_{0..9}.txt
# exit
# docker exec -it centos1 bash
# ll /var/
# rm -rf file_0.txt
    # exit
# docker exec -it centos1 bash
# ll /var/
# rm -rf file_0.txt
    # exit
3.备份数据卷
3.1创建一个data容器.
# docker run -itd -v /data/docker/:/var/wang --name centos.1 centos
# cd /data/docker/
# touch wang.{a..z}.log
# ll
# docker exec -it centos.1 bash
# ll
# exit
3.2用数据卷容器备份
# docker run -it --volumes-from centos.1 -v /home:/tmp centos tar -cvf /tmp/wang.tar /var/wang
\\先创建一个容器,并挂载要备份的centos.1容器数据卷,再挂本地/home目录到容器/tmp,然后在容器中打包备份/var/wang目录到/tmp/wang.tar,也就是备份到宿主机home目录。
# ll /home/
# tar -xvf wang.tar
4.恢复数据卷
# mkdir -p /data/docker
# touch /data/docker/{1..5}.log
# ll /data/docker/
4.1运行容器并新建数据卷
# docker run -itd -v /data/docker/:/var/wang --name app.1 centos
# docker exec -it app.1 bash
# cat /etc/passwd >/var/wang/123.txt
# ll /var/wang/
# exit
4.2备份
# docker run -it --volumes-from app.1 -v /home:/tmp centos tar -cvf /tmp/backup.tar /var/wang
4.3验证
# ll /home/
4.4恢复
# docker run -itd --name dbdata -v /var/wang centos
# docker run -itd --name app.1 --volumes-from dbdata -v /home/:/tmp/ centos tar xvf /tmp/backup.tar

九、网络
1.docker修改默认网桥
1.1安装工具,停止docker服务
# yum install bridge-utils
# systemctl stop docker
1.2创建新网桥br0
# brctl addbr br0 
# ip addr add 192.168.1.1/24 deb br0
# ip link set dev br0 up 
# ifconfig br0 
1.3配置默认桥接到创建的网桥上。
# vim /etc/docker/daemon.json
{
"bridge": "br0"
}
1.4删除旧的网桥,启动docker
# ip link set dev docker0 down
# brctl delbr docker0
# systemctl start docker















标签: docker

评论列表

澳代
2017-09-13 21:24
非常好的分享

我来说说