Docker复习之部署篇

部署docker

环境:CentOS Linux release 7.4.1708 (Core)
内核:3.10.0-693.el7.x86_64
软件版本:docker分以下几种版本:
docker-engin、docker-io, docker-ce和 docker-ee;其中,docker-io, docker-engin 是以前早期的版本,版本号是 1.*,默认centos7 安装的是docker-io;docker-ce 是社区版本,适用于刚刚开始docker 和开发基于docker研发的应用开发者或者小型团队。Ubuntu默认安装的是docker-ce;docker-ee 是docker的企业版,适用于企业级开发,同样也适用于开发、分发和运行商务级别的应用的IT 团队,产品支持需要付费。目前,Docker改为基于YY.MM的版本,其中又分Stable(发布较慢),Edge(发布较快)版本;Edge版本每月发布,提供一个月支持,Stable版本每季度发布,提供4个月支持。

部署方式:
Docker复习之部署篇_第1张图片

1)添加yum源

#yum install epel-release –y
#yum clean all
#yum list

2)设置远程仓库

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
输出:
已加载插件:fastestmirror
adding repo from: https://download.docker.com/linux/centos/docker-ce.repo
grabbing file https://download.docker.com/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo

3)安装Docker

yum install -y yum-utils
yum install docker-ce –y //安装社区版docker

将安装以下包:
已安装:
docker-ce.x86_64 3:19.03.5-3.el7

作为依赖被安装:
audit-libs-python.x86_64 0:2.8.5-4.el7 checkpolicy.x86_64 0:2.5-8.el7 container-selinux.noarch 2:2.107-3.el7
containerd.io.x86_64 0:1.2.10-3.2.el7 docker-ce-cli.x86_64 1:19.03.5-3.el7 libsemanage-python.x86_64 0:2.5-14.el7
policycoreutils-python.x86_64 0:2.5-33.el7 python-IPy.noarch 0:0.75-6.el7 setools-libs.x86_64 0:3.3.8-4.el7

作为依赖被升级:
audit.x86_64 0:2.8.5-4.el7 audit-libs.x86_64 0:2.8.5-4.el7 libselinux.x86_64 0:2.5-14.1.el7
libselinux-python.x86_64 0:2.5-14.1.el7 libselinux-utils.x86_64 0:2.5-14.1.el7 libsemanage.x86_64 0:2.5-14.el7 libsepol.x86_64 0:2.5-10.el7 policycoreutils.x86_64 0:2.5-33.el7 selinux-policy.noarch 0:3.13.1-252.el7_7.6
selinux-policy-targeted.noarch 0:3.13.1-252.el7_7.6

完毕!

systemctl start docker
或service docker start
Docker复习之部署篇_第2张图片
加入开机启动:
chkconfig docker on
systemctl enable docker

4)验证安装结果

docker info
Docker复习之部署篇_第3张图片
docker run hello-world
输出:
Unable to find image ‘hello-world:latest’ locally
docker: Error response from daemon: Get https://registry-1.docker.io/v2/library/hello-world/manifests/latest: Get https://auth.docker.io/token?scope=repository%3Alibrary%2Fhello-world%3Apull&service=registry.docker.io: net/http: request canceled (Client.Timeout exceeded while awaiting headers).
See ‘docker run --help’.

查看版本:
docker version或docker –v
Docker复习之部署篇_第4张图片
Docker复习之部署篇_第5张图片

Docker常用命令

docker [run|start|stop|restart|kill|rm|pause|unpause] #容器生命周期管理
docker [ps|inspect|top|attach|events|logs|wait|export|port] #容器操作运维
docker [commit|cp|diff] #容器rootfs命令
docker [login|pull|push|search] #镜像仓库
docker [images|rmi|tag|build|history|save|import] #本地镜像管理

1)查找suse镜像:
语法格式:docker search 镜像名称
docker search suse
Docker复习之部署篇_第6张图片
2)下载susu镜像并验证查看:
语法格式:docker pull # 从docker registry server 中下拉image
或者:docker pull image_name:tag
其中#image_name:表示镜像的仓库源名称,TAG:镜像的标签 如果不指定tag 那么默认用最新的

docker pull mbentley/suse12-build //拉镜像
Docker复习之部署篇_第7张图片
验证:
docker images: # 列出images
docker images -a # 列出所有的images(包含历史)
3)删除镜像:
docker rmi 镜像名称/镜像ID
docker rmi -f 镜像名称/镜像ID
docker rmi : # 删除一个或多个image
#强制删除 如果镜像有容器在运行 那么就需要强制删除 增加 -f 参数
4)创建运行容器:

run创建容器:docker run -itd
create创建: docker create -it
参数说明:
-t, --tty Allocate a pseudo-TTY
-i, --interactive Keep STDIN open even if not attached
-d, --detach Run container in background and print container ID #run的

注意: docker run 和 docker create 参数基本一样,run是创建容器并后台启动,create是只创建容器。

docker run 相当于docker create 和 docker start
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 #创建一个名称centos_aways的容器,自动重启
#–restart参数:always始终重启;on-failure退出状态非0时重启;默认为,no不重启

docker run #首先会从本地找镜像,如果有则直接启动,没有的话,从镜像仓库拉起,再启动)
docker run -d --name “suse” -p 5672:5672 -p 15672:15672 mbentley/suse12
#-d 后台运行
#-p 端口映射 (可以有多个 因为该镜像可能存在多个端口)
#mbentley/suse12 (格式 REPOSITORY:TAG),如果不指定tag,默认使 用最新的
#–name 给该容器取个名字
5)其他容器命令:
列举当前运行的容器:
docker ps :列出当前所有正在运行的container
docker ps -l :列出最近一次启动的container
docker ps -a :列出所有的container(包含历史,即运行过的container)
docker ps -q :列出最近一次运行的container ID
检查容器内部信息:docker inspect 容器名称
停止某个容器:docker stop 容器名称
启动某个容器:docker start 容器名称
docker start/stop/restart
移除某个容器:docker rm 容器名称 (容器必须是停止状态)
docker rm docker ps -a -q #:删除所有的container
docker ps -a -q | xargs docker rm #:同上, 删除所有的container
docker logs $CONTAINER_ID #查看docker实例运行日志,确保正常运行
docker inspect $CONTAINER_ID
docker inspect 查看image或container的底层信息
docker build 寻找path路径下名为的Dockerfile的配置文件,使用此配置生成新的image
docker build -t repo[:tag] 同上,可以指定repo和可选的tag
docker build - < 使用指定的dockerfile配置文件,docker以stdin方式获取内容,使用此配置生成新的image
docker port 查看本地哪个端口映射到container的指定端口,其实用docker ps 也可以看到

6)进入连接容器:
docker exec -it [container_id] /bin/bash //exec进入容器
docker run -i -t -p #:映射 HOST 端口到容器,方便外部访问容器内服务,host_port 可以省略,省略表示把 container_port 映射到一个动态端口。
7)查看容器状态信息:
docker stats 或docker stats --no-stream

持久化容器与镜像

1) 通过容器生成新的镜像
运行中的镜像称为容器。你可以修改容器(比如删除一个文件),但这些修改不会影响到镜像。不过,你使用docker commit 命令可以把一个正在运行的容器变成一个新的镜像。

docker commit [repo:tag] # 将一个container固化为一个新的image,后面的repo:tag可选。
示例:
2)持久化容器
export命令用于持久化容器
docker export > /tmp/c_export.tar
3)持久化镜像
Save命令用于持久化镜像
docker save 镜像ID > /tmp/img_save.tar
4)导入持久化container

删除container 20191230ff32:
docker rm 20191230ff32

导入c_export.tar文件:
cat /tmp/c_export.tar | docker import - export:latest

5)导入持久化image
删除image fdd11395672e

docker rmi fdd11395672e

导入save.tar文件

docker load < /tmp/img_save.tar
对image打tag:
docker tag daa123jf23g load:tag

注意:docker文件存放目录
Docker实际上把所有东西都放到 /var/lib/docker 路径下了。containers目录当然就是存放容器(container)了,graph目录存放镜像,文件层(file system layer)存放在graph/imageid/layer路径下。

6)export-import与save-load的区别
导出后再导入(export-import)的镜像会丢失所有的历史,而保存后再加载(save-load)的镜像没有丢失历史和层(layer)。这意味着使用导出后再导入的方式,你将无法回滚到之前的层(layer),同时,使用保存后再加载的方式持久化整个镜像,就可以做到层回滚。(可以执行docker tag 来回滚之前的层)。

你可能感兴趣的:(虚拟化和云实践纪实)