Docker
是一个开源工具,它可让建立和管理Linux
容器变得简单。容器就像是轻量级的虚拟机,而且能够以毫秒级的速度来启动或中止。Docker
帮助系统管理员和程序员在容器中开发应用程序,而且能够扩展到成千上万的节点。html
这是一只鲸鱼,它托着许多集装箱。咱们能够把宿主机可当作这只鲸鱼,把相互隔离的容器可当作集装箱,每一个集装箱中都包含本身的应用程序。node
Docker
技术的体系架构:容器和虚拟机(VM
)的主要区别是:linux
CPU
、内存和硬盘)的彻底隔离。G
,而容器可能只须要几百兆。Docker
平台基本上由三部分组成:程序员
Docker
提供的工具(CLI
以及API
等)来构建,上传镜像并发布命令来建立和启动容器。Docker registry
上下载镜像并启动和托管容器。Docker
镜像仓库,用于保存镜像,并提供镜像上传和下载。一个容器在某个时刻可能处于如下几种状态之一:web
created:已经被建立 (使用docker ps -a
命令能够列出) 可是尚未被启动,使用docker ps
命令还没法列出。 running:容器在这正常运行中。 paused:容器的进程被暂停了。 restarting:容器的进程正在重启过程当中。 exited:上图中的stopped
状态,表示容器以前运行过可是如今处于中止状态 (要区别于created
状态,它是指一个新建立的还没有运行过的容器)。能够经过start
命令使其从新进入running
状态。 destroyed:容器从宿主机删除了,不再存在了。docker
RedHat/CentOS
必需要6.6
版本以上,或者7.x
才能安装docker
,建议在RedHat/CentOS 7
上使用docker
,由于RedHat/CentOS 7
的内核升级到了kernel 3.10
,对lxc
容器支持更好。编程
查看Linux
内核版本(内核版本必须是3.10
或者以上):json
cat /proc/version
uname -a
lsb_release -a
##没法执行命令安装
yum install -y redhat-lsb
复制代码
更新yum
安装源:后端
yum install docker -y
复制代码
检查docker
版本:centos
docker -v
复制代码
安装完成后,使用下面的命令来启动docker
服务,并将其设置为开机启动:
service docker start
chkconfig docker on
复制代码
下载官方的CentOS
的docker
镜像:
docker pull centos
复制代码
检查CentOS
镜像是否被成功拉取到本地宿主机:
# 查看本地镜像列表
docker images
# 删除镜像
docker rmi <image id>
# 删除镜像(针对多个相同image id的镜像)
docker rmi repository:tag
复制代码
镜像下载完成后,你应该会看到:
[root@iZ2ze74fkxrls31tr2ia2fZ ~]# docker images centos
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/centos latest 3fa822599e10 3weeks ago 203.5 MB
复制代码
若是看到以上输出,说明你可使用docker.io/centos
这个镜像了,或将其称为仓库(Repository
),该镜像有一个名为latest
的标签(Tag
),此外还有一个名为3fa822599e10
的镜像ID
(可能您所看到的镜像 ID 与此处的不一致,那是正常现象,由于这个数字是随机生成的)。 此外,咱们能够看到该镜像只有203.5MB
,很是小巧,而不像虚拟机的镜像文件那样庞大。
重命名TAG
为centos
:
# docker tag IMAGE_ID(镜像id) REPOSITORY:TAG(仓库:标签)
docker tag 3fa822599e10 docker.io/centos:centos
复制代码
启动CentOS
的容器:
docker run -i -t -v /root/software/:/mnt/software/ 3fa822599e10 /bin/bash
复制代码
命令参数说明: docker run <相关参数> <镜像ID> <初始命令>
-i
:表示以交互模式运行容器-t
:表示容器启动后会进入其命令行-v
:表示须要将本地哪一个目录挂载到容器中,格式:-v <宿主机目录>:<容器目录>更多参数详解:
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
-d, --detach=false 指定容器运行于前台仍是后台,默认为false
-i, --interactive=false 打开STDIN,用于控制台交互
-t, --tty=false 分配tty设备,该能够支持终端登陆,默认为false
-u, --user="" 指定容器的用户
-a, --attach=[] 登陆容器(必须是以docker run -d启动的容器)
-w, --workdir="" 指定容器的工做目录
-c, --cpu-shares=0 设置容器CPU权重,在CPU共享场景使用
-e, --env=[] 指定环境变量,容器中可使用该环境变量
-m, --memory="" 指定容器的内存上限
-P, --publish-all=false 指定容器暴露的端口
-p, --publish=[] 指定容器暴露的端口
-h, --hostname="" 指定容器的主机名
-v, --volume=[] 给容器挂载存储卷,挂载到容器的某个目录
--volumes-from=[] 给容器挂载其余容器上的卷,挂载到容器的某个目录
--cap-add=[] 添加权限,权限清单详见:http://linux.die.net/man/7/capabilities
--cap-drop=[] 删除权限,权限清单详见:http://linux.die.net/man/7/capabilities
--cidfile="" 运行容器后,在指定文件中写入容器PID值,一种典型的监控系统用法
--cpuset="" 设置容器可使用哪些CPU,此参数能够用来容器独占CPU
--device=[] 添加主机设备给容器,至关于设备直通
--dns=[] 指定容器的dns服务器
--dns-search=[] 指定容器的dns搜索域名,写入到容器的/etc/resolv.conf文件
--entrypoint="" 覆盖image的入口点
--env-file=[] 指定环境变量文件,文件格式为每行一个环境变量
--expose=[] 指定容器暴露的端口,即修改镜像的暴露端口
--link=[] 指定容器间的关联,使用其余容器的IP、env等信息
--lxc-conf=[] 指定容器的配置文件,只有在指定--exec-driver=lxc时使用
--name="" 指定容器名字,后续能够经过名字进行容器管理,links特性须要使用名字
--net="bridge" 容器网络设置:
bridge 使用docker daemon指定的网桥
host //容器使用主机的网络
container:NAME_or_ID >//使用其余容器的网路,共享IP和PORT等网络资源
none 容器使用本身的网络(相似--net=bridge),可是不进行配置
--privileged=false 指定容器是否为特权容器,特权容器拥有全部的capabilities
--restart="no" 指定容器中止后的重启策略:
no:容器退出时不重启
on-failure:容器故障退出(返回值非零)时重启
always:容器退出时老是重启
--rm=false 指定容器中止后自动删除容器(不支持以docker run -d启动的容器)
--sig-proxy=true 设置由代理接受并处理信号,可是SIGCHLD、SIGSTOP和SIGKILL不能被代理
复制代码
咱们能够把Docker
的命令大概地分类以下:
## 镜像操做:
build Build an image from a Dockerfile
commit Create a new image from a container's changes images List images load Load an image from a tar archive or STDIN pull Pull an image or a repository from a registry push Push an image or a repository to a registry rmi Remove one or more images search Search the Docker Hub for images tag Tag an image into a repository save Save one or more images to a tar archive history 显示某镜像的历史 inspect 获取镜像的详细信息 ## 容器及其中应用的生命周期操做: create 建立一个容器 kill Kill one or more running containers inspect Return low-level information on a container, image or task pause Pause all processes within one or more containers ps List containers rm 删除一个或者多个容器 rename Rename a container restart Restart a container run 建立并启动一个容器 start 启动一个处于中止状态的容器 stats 显示容器实时的资源消耗信息 stop 中止一个处于运行状态的容器 top Display the running processes of a container unpause Unpause all processes within one or more containers update Update configuration of one or more containers wait Block until a container stops, then print its exit code attach Attach to a running container exec Run a command in a running container port List port mappings or a specific mapping for the container logs 获取容器的日志 ## 容器文件系统操做: cp Copy files/folders between a container and the local filesystem diff Inspect changes on a container's filesystem
export Export a container's filesystem as a tar archive import Import the contents from a tarball to create a filesystem image Docker registry 操做: login Log in to a Docker registry. logout Log out from a Docker registry. ## Volume操做: volume Manage Docker volumes ## 网络操做: network Manage Docker networks ## Swarm 相关操做: swarm Manage Docker Swarm service Manage Docker services node Manage Docker Swarm nodes ## 系统操做: version Show the Docker version information events 持续返回docker 事件 info 显示Docker 主机系统范围内的信息 复制代码
# 查看运行中的容器
docker ps
# 查看全部容器
docker ps -a
# 退出容器
按Ctrl+D 便可退出当前容器【但退出后会中止容器】
# 退出不中止容器:
组合键:Ctrl+P+Q
# 启动容器
docker start 容器名或ID
# 进入容器
docker attach 容器名或ID
# 中止容器
docker stop 容器名或ID
# 暂停容器
docker pause 容器名或ID
#继续容器
docker unpause 容器名或ID
# 删除容器
docker rm 容器名或ID
# 删除所有容器--慎用
docker stop $(docker ps -q) & docker rm $(docker ps -aq)
#保存容器,生成镜像
docker commit 容器ID 镜像名称
#从 host 拷贝文件到 container 里面
docker cp /home/soft centos:/webapp
复制代码
docker run
只在第一次运行时使用,将镜像放到容器中,之后再次启动这个容器时,只须要使用命令docker start
便可。
docker run
至关于执行了两步操做:将镜像放入容器中(docker create
),而后将容器启动,使之变成运行时容器(docker start
)。
而docker start
的做用是,从新启动已存在的镜像。也就是说,若是使用这个命令,咱们必须事先知道这个容器的ID
,或者这个容器的名字,咱们可使用docker ps
找到这个容器的信息。
由于容器的ID
是随机码,而容器的名字又是看似无心义的命名,咱们可使用命令:
docker rename jovial_cori centos
复制代码
给这个容器命名。这样之后,咱们再次启动或中止容器时,就能够直接使用这个名字:
docker [stop] [start] new_name
复制代码
而要显示出全部容器,包括没有启动的,可使用命令:
docker ps -a
复制代码
更改存储目录:
#复制docker存储目录
rsync -aXS /var/lib/docker/. /home/docker
#更改 docker 存储文件目录
ln -s /home/docker /var/lib/docker
复制代码
查看启动容器的具体信息:
docker inspect <container_id>
复制代码
要获取全部容器名称及其IP
地址只需一个命令:
docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress }}' $(docker ps -aq)
docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
复制代码
注册一个阿里云账号:
阿里云会自动为用户分配一个镜像加速器的地址,登陆后进入”管理中心” —> ”加速器”,里面有分配给你的镜像加速器的地址以及各个环境的使用说明。
镜像加速器地址示例:https://xxxxx.mirror.aliyuncs.com
针对Docker
客户端版本大于1.10.0
的用户,能够经过修改daemon
配置文件/etc/docker/daemon.json
来使用加速器**:
{
"registry-mirrors": ["<your accelerate address>"]
}
复制代码
重启Docker Daemon
:
sudo systemctl daemon-reload
sudo systemctl restart docker
复制代码
欢迎关注技术公众号: 零壹技术栈
本账号将持续分享后端技术干货,包括虚拟机基础,多线程编程,高性能框架,异步、缓存和消息中间件,分布式和微服务,架构学习和进阶等学习资料和文章。