docker总结

docker?

它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。

docker目标是实现轻量级的操作系统虚拟化解决方案。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单

用docker?

高的资源利用率。

Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而Docker 只需要启动 10 个隔离的应用即可。

高效的部署和扩容

Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。

更快速的交付和部署

Docker在整个开发周期都可以完美的辅助你实现快速交付。Docker允许开发者在装有应用和服务本地容器做开发。可以直接集成到可持续开发流程中。

例如:开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。 Docker 可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。 Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。


docker引擎是一个c/s结构的应用,主要组件见下图:

docker总结

核心概念

镜像

镜像(Image)就是一堆只读层(read-only layer)的统一视角。

Docker 镜像(Image)就是一个只读的模板。例如:一个镜像可以包含一个完整的操作系统环境,里面仅安装了 Apache 或用户需要的其它应用程序。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。

仓库(repository)

仓库(Repository)是集中存放镜像文件的场所。有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。

仓库分为公开仓库(Public)和私有仓库(Private)两种形式。最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。国内的公开仓库包括 时速云 、网易云 等,可以提供大陆用户更稳定快速的访问。当然,用户也可以在本地网络内创建一个私有仓库。

当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。

Docker 仓库的概念跟 Git 类似,注册服务器可以理解为 GitHub 这样的托管服务。

容器(container)

Docker 利用容器(Container)来运行应用。容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

容器的定义和镜像几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。

Docker安装部署

https://www.cnblogs.com/lighten/p/6034984.html  docker安装

https://segmentfault.com/a/1190000004518306    使用docker部署postgresql

安装docker参考网址
https://www.cnblogs.com/lrj567/p/6322617.html 安装docker1.
http://blog.****.net/liuyueyi1995/article/details/61204205 安装dockerCE.
http://www.linuxidc.com/Linux/2017-06/144717.htm 安装docker3.
http://blog.****.net/gsls200808/article/details/53354962 安装docker4.

docker学习内容
docker大牛博客地址:http://blog.****.net/yangzhenping/article/category/2752665
http://www.open-open.com/lib/view/open1423703640748.html#articleHeader8

http://blog.****.net/liuyueyi1995/article/details/61204205

Docker常用命令

获取镜像postgres: docker pull postgres
查看获取镜像: docker images
启动/重启/停止镜像 sudo service docker start/restart/stop
删除镜像 docker rmi -f 镜像id/镜像名字


新建容器名称为ABC的容器:docker run --name ABC(容器) -t -i postgres(镜像) /bin/bash


新建容器并运行容器:docker run --name pg1(自定义TAG名) -e POSTGRES_PASSWORD=自定义密码 -p 自定义映射端口:5432 -d postgres(镜像名称):9.5(容器名称)
psql -U postgres(镜像名称) -h 192.168.100.172(IP) -p (定义映射端口)


进入容器: sudo docker run -t -i -d ubuntu(镜像名称):14.04(容器名称) /bin/bash 
注:*****也可直接通过容器ID进入


运行容器: docker run -itd -P postgres bash
查看容器详情: docker ps -a

启动已停止容器:docker start pg1

进入运行容器并查看容器内数据文件、配置文件、网络授权文件设置:docker exec -it 3bf3b533ba05(容器ID) /bin/bash

所有postgresql配置文件和数据,数据文件位于:/var/lib/postgresql/data   

ps -fe 之后。其中1号进程就是启动命令。
查看容器详细命令:docker inspect 容器id

创建容器但是不运行:docker create -t -i (镜像名称) bash    之后可通过命令:docker start -a -i (容器id)运行

创建数据卷绑定到到新建容器,新建容器中会创建 /data 数据卷:docker run --name data -v /data -t -i ubuntu:14.04 /bin/bash #  
查看#: ls -ld /data(容器名)/

挂载的数据卷在宿主机位置:/var/lib/docker

docker run -it -v /localDir:/dockerDir image(rna:v1.7) /bin/bash 
挂载本地路径到docker内 其中localDir为一个本地路径,dockerDir为docker虚拟机内路径,image为一个现有镜像,格式为name:tag

挂载宿主机目录为一个数据卷:docker run --name web(容器名) -v /source/:/web -t -i ubuntu:14.04 /bin/bash
默认挂载卷是可读写的,可以在挂载时指定只读:docker run --rm --name test(容器名) -v /source/:/test:ro -t -i ubuntu:14.04 /bin/bash

创建数据卷容器: docker run -t -i -d -v /test --name test ubuntu:14.04 echo hello
使用--volumes-from选项在另一个容器中挂载 /test 卷。不管 test 容器是否运行,其它容器都可以挂载该容器数据卷,当然如果只是单独的数据卷是没必要运行容器的。
docker run -t -i -d --volumes-from test --name test1 ubuntu:14.04 /bin/bash
添加另一个容器:docker run -t -i -d --volumes-from test --name test2 ubuntu:14.04 /bin/bash
也可以继承其它挂载有 /test 卷的容器:docker run -t -i -d --volumes-from test1 --name test3 ubuntu:14.04 /bin/bash

docker下pgsql数据路径及其配置文件:/var/lib/postgres/data/
docker在Linux所在位置:/var/lib/docker  

复制宿主机文件到容器中:docker cp 宿主机文件路径 容器id:要复制到容器路径
复制容器中文件到宿主机:docker cp 容器id:容器文件路径 宿主机文件路径

备份(导出)镜像:docker commit -p 30b8f18f20b4(被备份容器id) container-backup(生成之后镜像名称)
打tar包镜像:docker save -o ~/container-backup.tar(tar包的镜像名字) container-backup(镜像名称)注:打好的tar包在root下
恢复镜像:docker load -i ~/container-backup.tar(tar包的镜像名字)
运行容器:docker run --name ABC(容器) -t -i postgres(镜像) /bin/bash

(备份)导出容器export:docker export 容器ID > my_container.tar  
导入容器为镜像import:cat my_container.tar |docker import - image_name(镜像名称):tag(镜像tag)
运行导入的镜像:docker run --name pg2(容器名) -e POSTGRES_PASSWORD=(密码自定) -d -p (端口自定):5432 (镜像名):(镜像tag) docker-entrypoint.sh镜像command
查看容器IP的信息:docker inspect 3bf3b533ba05(容器id) |grep IPAddress

查看容器的内部IP:docker inspect --format='{{.NetworkSettings.IPAddress}}' $CONTAINER_ID

宿主机上的data文件夹:docker inspect (容器名)|grep Source
/var/lib/docker/volumes/b2892403b622c733f771520eaff33055c77e1621f525dd038ea4610622454749/_data

https://www.cnblogs.com/cxy486/p/5164612.html  PGSQL 流复制测试环境

不退出容器命令:Ctrl+p,ctrl+q

https://www.cnblogs.com/lighten/p/6034984.html  docker安装
容器相关命令 https://www.cnblogs.com/softidea/p/5271847.html
新建镜像 http://blog.****.net/five3/article/details/75669884
新建镜像并启动容器 sudo docker run -t -i training(镜像名称)/sinatra(容器名称) /bin/bash  
-t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, -i 则让容器的标准输入保持打开
进入容器 sudo docker run -ti ubuntu(镜像名称):14.04(容器名称) /bin/bash
 或者    sudo docker run -t -i -d (镜像名称):(容器名称) /bin/bash    ----后台运行

之后就是进入交互模式pwd


守护态运行,添加 -d 参数来实现
进入容器 sudo docker run -t -i -d ubuntu(镜像名称):14.04(容器名称) /bin/bash 
查看容器信息 docker ps  之后根据ID也可进入交互模式 docker attach 容器ID  
查找容器ID docker ps -a  
docker start + 容器ID,命令,直接将一个已经终止的容器启动运行。


将宿主机文件夹挂载到容器中 docker run -t -i --name test -v /宿主文件夹路径:/容器文件夹路径:ro 容器名称 /bin/bash


docker run --name postgres1(自定义TAG名) -e POSTGRES_PASSWORD=自定义密码 -p 自定义映射端口:5432 -d postgres(镜像名称):9.5(容器名称)
psql -U postgres(容器名称) -h 192.168.100.172 -p (定义映射端口)


docker run --name yourappname -e POSTGRES_PASSWORD=xxx -e POSTGRES_USER=xxx\
    -v ./data:/home/pgxl/pgdata -d -p xxxx:5432 postgres



http://www.linuxidc.com/Linux/2017-09/146658.htm   docker安装MySQL
http://www.linuxidc.com/Linux/2017-02/140214.htm docker运行MySQL服务
http://www.linuxidc.com/Linux/2017-09/146658.htm docker在容器中使用SQL数据库
http://www.linuxidc.com/Linux/2015-08/121184.htm docker中镜像的备份,恢复等。。。
http://blog.****.net/clj198606061111/article/details/50450793 docker中容器的迁移,备份等
http://www.freeswitch.net.cn/160.html docker搭建pg流复制
http://www.runoob.com/docker/docker-install-mysql.html docker之菜鸟集锦