Docker安装及镜像和容器的使用

Docker

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

Docker与常见虚拟化方式的区别

传统方式是在硬件层面实现虚拟化,需要有额外的虚拟机管理应用和虚拟机操作系统层。Docker容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,一次更加轻量级。

核心概念

Docker镜像(Image)

Docker镜像是类似于虚拟机镜像,可以将它理解为一个只读的模板。例如一个镜像可以包含一个基本的操作系统环境,里面仅安装了Apache应用程序(或用户需要的其他软件)可以把它称为一个Apache镜像。

Docker容器(Container)

Docker容器类似于一个轻量级的沙箱,Docker利用容器来运行和隔离应用。容器是从镜像创建的应用的运行实例。可以将其启动、开始、停止、删除,而这些容器都是彼此相互隔离的,互不可见的。
可以把容器看做是一个简易版的Linux系统环境(包括root用户权限、进程空间、用户空间和网络空间等)以及运行在其中的应用程序打包而成的盒子。
镜像和容器的关系:镜像自身是可读的。容器从镜像启动的时候,会在镜像的最上层创建一个可写层。

Docker仓库(Repository)

Docker仓库类似于代码仓库,他是Docker集中存放镜像文件的场所。


Docker的安装配置及使用详情

1、docker安装与启动

yum install -y epel-release
yum install docker-io # 安装docker# 配置文件 /etc/sysconfig/docker
DOCKER_OPTS=”$DOCKER_OPTS -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock”

chkconfig docker on # 加入开机启动
service docker start # 启动docker服务

基本信息查看

docker version # 查看docker的版本号,包括客户端、服务端、依赖的Go等
docker info # 查看系统(docker)层面信息,包括管理的images, containers数等
docker pull centos 下载
docker images [ centos ] 查看
docker run -i -t centos /bin/bash

2、镜像的获取与容器的使用

搜索镜像

docker search # 在docker index中搜索image# 下载镜像
docker pull # 从docker registry server 中下拉image# 查看镜像
docker images: # 列出images
docker images -a # 列出所有的images(包含历史)
docker rmi : # 删除一个或多个image

使用tag命令添加镜像标签

docker tag sauloal/ubuntu14.04 myubuntu:14.04 #为本地镜像文件添加新的标签

使用inspect命令查看详细信息

docker inspect auloal/ubuntu14.04 # 获取该镜像的详细信息,包括制作者等
docker inspect -f {{“.Architechture”}} # 获取镜像的Architechture,返回一个json格式的消息

创建镜像

1.基于已有镜像的容器创建
docker commit -m “Added a new file” -a ”Docker Newbee” a925cb40b3f0 test:0.1
2.基于本地模板导入
cat ubuntu-14.04-x86_64-minimal.tar.gz | docker import - ubuntu:14.04

存出和载入镜像

1.存出镜像
docker save -o ubuntu_14.04.tar ununtu:14.04
2.载入镜像
docker load –input ubuntu_14.04.tar

docker load < ubuntu_14.04.tar

上传镜像

docker tag test:latest /user/test:latest
docker push /user/test:laest

3、容器的获取与容器的使用

使用镜像创建容器
docker create -it sauloal/ubuntu14.04
docker start af # 容器启动
docker ps # 查看运行中的容器

docker run -i -t sauloal/ubuntu14.04
新建并启动容器
docker run -i -t sauloal/ubuntu14.04 /bin/bash # 创建一个容器,让其中运行 bash 应用,退出后容器关闭
docker run -itd –name centos_aways –restart=always centos # -d 守护态运行,即后台运行 创建一个名称centos_aways的容器,自动重启# –restart参数:always始终重启;on-failure退出状态非0时重启;默认为,no不重启 ;

查看容器

docker ps :列出当前所有正在运行的container
docker ps -l :列出最近一次启动的container
docker ps -a :列出所有的container(包含历史,即运行过的container)
docker ps -q :列出最近一次运行的container ID

再次启动容器

docker start/stop/restart <container> #:开启/停止/重启container
docker start [container_id] #:再次运行某个container (包括历史container)#进入正在运行的docker容器
docker exec -it [container_id] /bin/bash
docker run -i -t -p <host_port:contain_port> #:映射 HOST 端口到容器,方便外部访问容器内服务,host_port 可以省略,省略表示把 container_port 映射到一个动态端口。

进入容器

docker run -itd ubuntu:14.04

在使用-d参数时,容器启动后会进入后台,用户无法看到容器中的信息,也无法进行操作。
这个时候需要进入容器进行操作。
1、attach命令
运行创建好的容器
docker attach [运行的容器的名称]
但是使用attach命令有时候不方便,当多个窗口同时用attach命令连到同一个容器的时候,所有窗口都会同步显示。当某个窗口阻塞是,其他窗口也无法执行操作了。
2、exec命令

docker exec -it 243c325da7 /bin/bash

-i 打开标准输入接收用户输入命令,默认为false;
–pricileged=true|false 是否给执行命令以高权限,默认为false;
-t 分配为终端,默认为false;
-u 执行命令的用户名和id。

3、nsenter

PID=$(docker inspect --format "{{ .State.Pid}}" elated_ritchie) # 获取PID
nsenter --target $PID --mount --uts --ipc --net --pid # 根据PID进入容器

删除容器

docker ps -a
docker rm <container...> #:删除一个或多个container

导入和导出容器

导出容器是指导出一个已经创建的容器文件,不管此时这个容器是否处于运行状态。可以使用docker export命令。

docker export -o test_for_run.tar ce5
docker export e81 >test_for_stop.tar

导入容器

cat test_for_run.tar | sudo docker import - test/ubuntu:v1.0
docker import test_for_run.tar - test/ubuntu:v1.0
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章