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 操作
command | act |
---|---|
create | 为镜像添加可读写层,构成一个未运行的容器 |
start | 为上面没有运行的容器添加一个进程隔离空间,即启动容器 |
run | create + 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操作
command | act |
---|---|
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相同。
- 在hub.docker.com注册账号lxdtest
- 将自己的镜像并推送到本地仓库
$ docker images
//标记到本地仓库,注意仓库必须是用户名
$ docker tag myImageName lxdtest/myImageName
- push到dockerhub
//推送客户端登录docker账号
$ docker login
$ docker push lxdtest/myImageName
此时远程已存在镜像,可pull使用:
$ docker pull lxdtest/myImageName
//push后建议清理本机镜像
$ docker rmi lxdtest/myImageName
就先这样,想到了再补充。
以上是关于docker原理与使用的主要内容,如果未能解决你的问题,请参考以下文章