docker原理与使用

Posted ythunder

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker原理与使用相关的知识,希望对你有一定的参考价值。

本文包括:

  • Docker 简单概念
  • 如何安装(centos7)
  • container和image操作命令
  • Dockfile 简单实用
  • dockerHub 简单使用

Docker简单概念

  • Docker 为C/S 架构模式,使用远程API管理和创建容器。
  • 使用docker前, 必须确保有启动状态的docker-daemon作为服务端 和 docker 命令作为客户端。docker client 发送请求,docker-daemon拉取所需镜像,创建容器。
  • 容器必须通过运行镜像启动
  • 镜像是一个可执行包,包含运行所需要的一切代码、运行时、环境变量和配置文件。
    我们可将镜像理解成一个或多个可执行的层(一般为多个),这个层是可读的。在可读层上添加一个读写层,即形成容器。再为容器分配一个独立的进程空间,即形成运行态容器。

安装

清理旧版本

sudo yum remove docker \\
                  docker-client \\
                  docker-client-latest \\
                  docker-common \\
                  docker-latest \\
                  docker-latest-logrotate \\
                  docker-logrotate \\
                  docker-selinux \\
                  docker-engine-selinux \\
                  docker-engine

设置docker存储库,后期通过存储库安装和更新

$ sudo yum install -y yum-utils \\
  device-mapper-persistent-data \\
  lvm2
$ sudo yum-config-manager \\
    --add-repo \\
    https://download.docker.com/linux/centos/docker-ce.repo

安装

//默认最新版本
$ sudo yum install docker-ce

//指定版本
$ yum list docker-ce --showduplicates | sort -r
$ sudo yum install docker-ce-<VERSION STRING>

启动

sudo systemctl start docker

container 操作

commandact
create为镜像添加可读写层,构成一个未运行的容器
start为上面没有运行的容器添加一个进程隔离空间,即启动容器
runcreate + start
stop向容器主进程发送SIGTREM信号,给容器收尾时间,然后发送SIGKILL强行终止进程
kill给docker中的所有进程发送SIGKILL信号
pause利用cgroup特性将运行中的容器进程空间暂停,发送SIGTSTP信号
rm移除镜像的可读写层,仅对非运行态容器有效
logs查看容器日志 -f <containerID>
ps陈列容器信息 -a查看所有状态的容器 -q仅显示containerID
exec通过宿主机在容器中执行一个新进程
inspect提取容器或镜像的元数据 docker inspect containerId(或imageId)
重要 stats实时监测宿主机的容器资源使用情况,在docker里,free等命令监测的是宿主机资源

image操作

commandact
images列出所有顶层镜像,即创建容器时使用的镜像 golang为基础创建一个新的镜像后,images仅显示新镜像,查看所有镜像层使用-a
commit将容器的可读写层转换为只读层,形成一个顶层镜像
rmi移除构成镜像的只读层,并且只能移除顶层。也可使用-f参数移除中间的层
save将image归档到文件 docker save imageName > /home/image.tar
load加载到本地 docker load < /home/image.tar
tag重新标记镜像 docker tag oldImageName newImageName
history递归输出镜像的历史镜像

简单的Dockerfile使用

docker会通过Dockerfile的指令来一步步创建容器

# 使用centos7基础镜像
FROM centos:7.2.1511

# 指定工作路径
WORKDIR  /home

# 开启容器的 80 端口,使得外部可以访问
EXPOSE 80

# 定义环境变量
ENV NAME World

# 拷贝文件
ADD  lxd.txt  /tmp/

# 镜像内执行命令
RUN ["yum", "install", "vim", "-y"]

命名必须为Dockerfile,使用命令构造镜像

docker build -t imageName  .  

再引用镜像创建容器:

docker run -d -p 4000:80 imageName

通过在容器内运行bash进入容器:

docker exec -it /bin/bash  <dockerID>

dockerHub使用

dockerHub使用方法和gitHub相同。

  1. 在hub.docker.com注册账号lxdtest
  2. 将自己的镜像并推送到本地仓库
$ docker   images

//标记到本地仓库,注意仓库必须是用户名
$ docker  tag  myImageName   lxdtest/myImageName
  1. push到dockerhub
//推送客户端登录docker账号
$ docker login
$ docker  push  lxdtest/myImageName 

此时远程已存在镜像,可pull使用:

$ docker pull  lxdtest/myImageName
//push后建议清理本机镜像
 $ docker rmi lxdtest/myImageName

就先这样,想到了再补充。

以上是关于docker原理与使用的主要内容,如果未能解决你的问题,请参考以下文章

Istio入门实战与架构原理——使用Docker Compose搭建Service Mesh

Docker容器实战五:镜像与容器

docker网络管理与本地私有Registry创建部署

索引,sql收尾

网络通信与信息安全之深入解析两台主机之间的通信过程和原理

以firejail sandbox解析Docker核心原理依赖的四件套