设为首页 收藏本站
查看: 531|回复: 0

[经验分享] docker讲解和命令汇总

[复制链接]

尚未签到

发表于 2018-5-27 12:46:53 | 显示全部楼层 |阅读模式
  
                            docker
   什么是docker?
  Docker是Docker.inc公司开源的一个基于LXC技术之上构建的Container容器引擎,源代码托管在GitHub上,基于Go语言并遵从Apache2.0协议开源(可以商业)。
  Docker项目的目标是实现轻量级的操作系统虚拟化解决方案。
  Docker是通过内核虚拟化技术(namespaces及cgroups等)来提供容器的资源隔离与安全保障等。由于Docker通过操作系统层的虚拟化实现隔离,所以Docker容器在运行时,不需要类似虚拟机VM额外的操作系统开销,提高资源利用率。
  比较了Docker和传统虚拟化方式的不同之处,可见容器是在操作系统层面上实现虚拟化,直接复制本地主机的操作系统,而传统方式则是在硬件层面实现。
  

  

  Docker 内部
  要理解 Docker 内部构建,需要理解以下三种部件:
  Docker镜像 - Docker images
  Docker仓库 - Docker registeries
  Docker容器 - Docker containers
  

  Docker 镜像
  Docker 镜像是 Docker 容器运行时的只读模板,每一个镜像由一系列的层 (layers) 组成。Docker 使用 UnionFS 来将这些层联合到单独的镜像中。UnionFS 允许独立文件系统中的文件和文件夹(称之为分支)被透明覆盖,形成一个单独连贯的文件系统。正因为有了这些层的存在,Docker是如此的轻量。当你改变了一个Docker 镜像,比如升级到某个程序到新的版本,一个新的层会被创建。因此,不用替换整个原先的镜像或者重新建立(在使用虚拟机的时候你可能会这么做),只是一个新 的层被添加或升级了。现在你不用重新发布整个镜像,只需要升级,层使得分发 Docker 镜像变得简单和快速。
  Docker 仓库
  Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。同样的,Docker 仓库也有公有和私有的概念。公有的 Docker 仓库名字是 Docker Hub。Docker Hub 提供了庞大的镜像集合供使用。这些镜像可以是自己创建,或者在别人的镜像基础上创建。Docker 仓库是 Docker 的分发部分。
  Docker 容器
  Docker 容器和文件夹很类似,一个Docker容器包含了所有的某个应用运行所需要的环境。每一个 Docker 容器都是从 Docker 镜像创建的。Docker 容器可以运行、开始、停止、移动和删除。每一个 Docker 容器都是独立和安全的应用平台,Docker 容器是 Docker 的运行部分
                          Docker的工作模式
  学习Docker的源码并不是一个枯燥的过程,反而可以从中理解Docker架构的设计原理。
  Docker对使用者来讲是一个C/S模式的架构,而Docker的后端是一个非常松耦合的架构,模块各司其职,并有机组合,支撑Docker的运行。
  用户是使用DockerClient与Docker Daemon建立通信,并发送请求给后者。
  而Docker Daemon作为Docker架构中的主体部分,首先提供Server的功能使其可以接受Docker Client的请求;而后Engine执行Docker内部的一系列工作,每一项工作都是以一个Job的形式的存在。
  Job的运行过程中,当需要容器镜像时,则从Docker Registry中下载镜像,并通过镜像管理驱动graphdriver将下载镜像以Graph的形式存储;当需要为Docker创建网络环境时,通过网络管理驱动networkdriver创建并配置Docker容器网络环境;当需要限制Docker容器运行资源或执行用户指令等操作时,则通过execdriver来完成。而libcontainer是一项独立的容器管理包,networkdriver以及execdriver都是通过libcontainer来实现具体对容器进行的操作。当执行完运行容器的命令后,一个实际的Docker容器就处于运行状态,该容器拥有独立的文件系统,独立并且安全的运行环境等。
  

                         Dcoerk八中应用场景
  1、简化配置,统一配置,通过镜像快速启动(Simplifying)
  2、代码流水线管理,开发环境->测试环境->预生产环境->灰度发布->正式发布,docker在这里实现了快速迁移(Code Oioeline Management)
  3、开发效率,对开发人员,有了镜像,直接启动容器即可(Developer Productivity)
  4、应用隔离,相对于虚拟机的完全隔离会占用资源,docker会比较节约资源(App lsolation)
  5、服务器整合,一台服务器跑多个docker容器,提高服务器的利用率(Server Consolidation)
  6、调试能力,debug调试(DebuggingCapabilties)
  7、多租户,一个租户多个用户,类似于阿里公有云的一个project下多个用户(Multi-tenancy)
  8、快速部署,不需要启动操作系统,实现秒级部署(Rapid Deplovment)
                      Docker八种开发模式
  1.共享基础容器
  2.共享卷开发容器
  3.开发工具容器
  4.不同环境下测试容器
  5.构建容器
  6.安装容器
  7.盒子中默认服务容器
  8.基础设施/粘合剂容器
                           Docker九个基本事实
  1.容器不同于虚拟机
  2.容器不如虚拟机来得成熟
  3.容器可以在几分之一秒内启动
  4.容器已在大规模环境证明了自身的价值
  5.IT人员称容器为轻量级
  6.容器引发了安全问题
  7.Docker已成为容器的代名词,但它不是唯一的提供者
  8.容器能节省IT人力,加快更新
  9.容器仍面临一些没有解决的问题
使用Docker理由
  作为一种新兴的虚拟化方式,Docker跟传统的虚拟化方式具有众多的优势。
  首先,Docker容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多。其次,Docker对系统资源的利用率很低,一台主机上可以同时运行数千个Docker容器。
  至于为什么要使用Docker:
  1、技术储备
  相对大公司这个非常重要,如果你们都在用,他们不用就落后了,等到完全成熟以后就跟不上了。
  2、无技术栈和技术债
  没有任何Openstack或者saltstack,服务down了就down了,所有的服务都是松耦合。
  3、跟上潮流(提升自我,装逼)
  面试的时候大家都会Docker,你不会是不是落后了。
  4、符合当前业务
  虽然Docker很优秀,但是,大多数处在第二种状态,很少有符合自己的业务
                        Docker改变了什么
  ● 面向产品:产品交付
  ● 面向开发:简化环境配置
  ● 面向测试:多版本测试
  ● 面向运维:环境一致性
  ● 面向架构:自动化扩容(微服务)
Docker更快速的交付和部署
  对于开发和人员来说,最希望的就是一次创建和配置,可以在任意地方正常运行。
  开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。Docker可以快速创建容器,快速迭代应用程序,并让整个过程全称可见,使团队中的其他成员更容易理解应用程序是如何创建和工作。Docker容器很轻很快!容器的启动时间是秒级的,大量第节约开发、测试、部署的时间。
Docker更高效的虚拟化
  Docker容器的运行不需要额外的Hypervisor支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。
Docker更轻松的迁移和扩展
  Docker容器几乎可以字啊任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。
Docker更简单的管理
  使用Docker,只需要小小的修改,就可以替代往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。
Docker与虚拟化
Docker与虚拟化


类别
Docker
OpenStack
结论
部署难度
非常简单
组件多,部署复杂
因为平台是对已有的线上生产环境进行改造,必须选择侵入性较小的容器化技术
启动速度
秒级
分钟级
面对流量峰值,速度就是一切
执行性能
和物理系统几乎一致
VM会占用一些资源
微博核心业务对服务SLA要求非常苛刻
镜像体积
镜像是MB级别
虚拟机镜像是GB级别
当集群大规模部署时,体积小就代表更大的并发调度量
管理效率
管理简单
组件相互依赖,管理复杂
生产系统集群可控性是核心竞争力
隔离性
隔离性高
彻底隔离

可管理性能
单进程、不建议启动SSH
完整的系统管理

网络连接
比较弱
借助Neutron可以灵活组建各类网络架构

Docker三大核心概念
Docker镜像(image)
  Docker镜像就是一个只读的模板。
  例如:一个镜像可以包含一个完整的CentOS操作系统环境,里面仅安装了Apache或用户需要的其他应用程序。
  镜像可以用来创建Docker容器。
  Docker提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。
Docker容器(container)
  Docker利用容器来运行应用。
  容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的,保证安全的平台。
  可以把容器看做是一个简易版的Linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
  注意:镜像是只读的,容器在启动的时候创建一层可写层作为最上层。
Docker仓库(repository)
  仓库是集中存放镜像文件的场所。有时候把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。
  仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
  最大的公开仓库是DockerHub,存放了数量庞大的镜像供用户下载。国内的公开仓库包括Docker Pool等,可以提供大陆用户更稳定快读的访问。
  当用户创建了自己的镜像之后就可以使用push命令将它上传到公有或者私有仓库,这样下载在另外一台机器上使用这个镜像时候,只需需要从仓库上pull下来就可以了。
  注意:Docker仓库的概念跟Git类似,注册服务器可以理解为GitHub这样的托管服务。
                   Docker企业实战
  系统环境
  [root@docker~]# cat/etc/redhat-release #查看版本号
  CentOSLinux release 7.2.1511 (Core)
  
  [root@docker ~]# uname -r #查看Linux内核
  c3.10.0-229.el7.x86_64
  
  [root@docker ~]#yum install -y docker
  #安装docker(CentOS7系统CentOS-Extras库中已带Docker)
  
  [root@docker~]#systemctlstart docker
  #启动docker
  
  [root@docker~]#systemctlenable docker
  #加入开机自启动
  
  [root@docker~]# dockerversion
  #查看docker版本信息
  Client:#docker客户端版本信息
  Version:1.8.2-el7.centos
  API version:1.20
  PackageVersion: docker-1.8.2-10.el7.centos.x86_64
  Go version:go1.4.2
  Git commit:a01dc02/1.8.2
  Built:
  OS/Arch:linux/amd64
  Server:#docker服务端版本信息
  Version:1.8.2-el7.centos
  API version:1.20
  PackageVersion:
  Go version:go1.4.2
  Git commit:a01dc02/1.8.2
  Built:
  OS/Arch:linux/amd6
  
  Docker基础命令
  [root@docker~]# docker–help
  
  Usage:docker [OPTIONS] COMMAND [arg…]
  
  dockerdaemon [ –help | … ]
  
  docker [–help | -v | –version ]
  
  Aself-sufficient runtime for containers.
  
  Options:
  –config=~/.docker Location of client configfiles #客户端配置文件的位置
  -D, –debug=falseEnable debug mode #启用Debug调试模式
  -H, –host=[]Daemon socket(s) to connect to #守护进程的套接字(Socket)连接
  -h, –help=falsePrint usage #打印使用
  -l, –log-level=infoSet the logging level #设置日志级别
  –tls=false Use TLS; implied by –tlsverify #
  –tlscacert=~/.docker/ca.pem Trust certssigned only by this CA #信任证书签名CA
  –tlscert=~/.docker/cert.pem Path to TLScertificate file #TLS证书文件路径
  –tlskey=~/.docker/key.pem Path to TLS keyfile #TLS密钥文件路径
  –tlsverify=false Use TLS and verify theremote #使用TLS验证远程
  -v, –version=falsePrint version information and quit #打印版本信息并退出
  Commands:
  attach Attach to a running container #当前shell下attach连接指定运行镜像
  build Build an image from a Dockerfile #通过Dockerfile定制镜像
  commit Create a new image from acontainer’s changes #提交当前容器为新的镜像
  cp Copy files/folders from a container toa HOSTDIR or to STDOUT #从容器中拷贝指定文件或者目录到宿主机中
  create Create a new container #创建一个新的容器,同run 但不启动容器
  diff Inspect changes on a container’s filesystem #查看docker容器变化
  events Get real time events from theserver #从docker服务获取容器实时事件
  exec Run a command in a running container#在已存在的容器上运行命令
  export Export a container’s filesystem as a tar archive #导出容器的内容流作为一个tar归档文件(对应import)
  history Show the history of an image #展示一个镜像形成历史
  images List images #列出系统当前镜像
  import Import the contents from a tarballto create a filesystem image #从tar包中的内容创建一个新的文件系统映像(对应export)
  info Display system-wide information #显示系统相关信息
  inspect Return low-level information on acontainer or image #查看容器详细信息
  kill Kill a running container #kill指定docker容器
  load Load an image from a tar archive orSTDIN #从一个tar包中加载一个镜像(对应save)
  login Register or log in to a Dockerregistry #注册或者登陆一个docker源服务器
  logout Log out from a Docker registry #从当前Docker registry退出
  logs Fetch the logs of a container #输出当前容器日志信息
  pause Pause all processes within acontainer #暂停容器
  port List port mappings or a specificmapping for the CONTAINER #查看映射端口对应的容器内部源端口
  ps List containers #列出容器列表
  pull Pull an image or a repository from aregistry #从docker镜像源服务器拉取指定镜像或者库镜像
  push Push an image or a repository to aregistry #推送指定镜像或者库镜像至docker源服务器
  rename Rename a container #重命名容器
  restart Restart a running container #重启运行的容器
  rm Remove one or more containers #移除一个或者多个容器
  rmi Remove one or more images #移除一个或多个镜像(无容器使用该镜像才可以删除,否则需要删除相关容器才可以继续或者-f强制删除)
  run Run a command in a new container #创建一个新的容器并运行一个命令
  save Save an image(s) to a tar archive #保存一个镜像为一个tar包(对应load)
  search Search the Docker Hub for images #在docker hub中搜索镜像
  start Start one or more stoppedcontainers #启动容器
  stats Display a live stream ofcontainer(s) resource usage statistics #统计容器使用资源
  stop Stop a running container #停止容器
  tag Tag an image into a repository #给源中镜像打标签
  top Display the running processes of acontainer #查看容器中运行的进程信息
  unpause Unpause all processes within acontainer #取消暂停容器
  version Show the Docker versioninformation #查看容器版本号
  wait Block until a container stops, thenprint its exit code #截取容器停止时的退出状态值
  Run ‘docker COMMAND –help’ for moreinformation on a command.
  #运行docker命令在帮助可以获取更多信息
安装docker
  第一步:下载yum安装包
  yum install docker -y
  第二步:加入开机自启动
  systemctl enable docker
  第三步:更改配置文件
  登录阿里云网站寻找镜像地址
  https://cr.console.aliyun.com
  修改配置文件 在固定的行添加上--registry-mirror=https://2b2oi9ju.mirror.aliyuncs.com
  vim /usr/lib/systemd/system/docker.service
  [Unit]
  Description=Docker Application Container Engine
  Documentation=http://docs.docker.com
  After=network.target
  Wants=docker-storage-setup.service
  Requires=docker-cleanup.timer
  [Service]
  Type=notify
  NotifyAccess=all
  KillMode=process
  EnvironmentFile=-/etc/sysconfig/docker
  EnvironmentFile=-/etc/sysconfig/docker-storage
  EnvironmentFile=-/etc/sysconfig/docker-network
  Environment=GOTRACEBACK=crash
  Environment=DOCKER_HTTP_HOST_COMPAT=1
  Environment=PATH=/usr/libexec/docker:/usr/bin:/usr/sbin
  ExecStart=/usr/bin/dockerd-current --registry-mirror=https://2b2oi9ju.mirror.aliyuncs.com\
  --add-runtimedocker-runc=/usr/libexec/docker/docker-runc-current \
  --default-runtime=docker-runc \
  --exec-opt native.cgroupdriver=systemd \
  --userland-proxy-path=/usr/libexec/docker/docker-proxy-current \
  $OPTIONS\
  $DOCKER_STORAGE_OPTIONS \
  $DOCKER_NETWORK_OPTIONS \
  $ADD_REGISTRY \
  $BLOCK_REGISTRY \
  $INSECURE_REGISTRY
  ExecReload=/bin/kill -s HUP $MAINPID
  LimitNOFILE=1048576
  LimitNPROC=1048576
  LimitCORE=infinity
  TimeoutStartSec=0
  Restart=on-abnormal
  MountFlags=slave
  [Install]
  WantedBy=multi-user.target
  第四步:
  重启一下
   systemctl daemon-reload
  第五步:
  打开docker
  systemctlstart docker
  第六步:检查docker状态,是否打开成功
  [root@centos7 ~]# systemctlstatus docker
  ● docker.service - Docker Application ContainerEngine
  Loaded:loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset:disabled)
  Active: active(running) since Fri 2017-07-14 09:15:30 CST; 5min ago
  Docs:http://docs.docker.com
  Main PID: 6093(dockerd-current)
  CGroup:/system.slice/docker.service
  ├─6093 /usr/bin/dockerd-current --registry-mirror=http...
  └─6097 /usr/bin/docker-containerd-current -l unix:///v...
  Jul 14 09:15:30 centos7 dockerd-current[6093]:time="2017-07-14T0...
  Jul 14 09:15:30 centos7 dockerd-current[6093]:time="2017-07-14T0...
  Jul 14 09:15:30 centos7 dockerd-current[6093]:time="2017-07-14T0...
  Jul 14 09:15:30 centos7 dockerd-current[6093]:time="2017-07-14T0...
  Jul 14 09:15:30 centos7 dockerd-current[6093]:time="2017-07-14T0...
  Jul 14 09:15:30 centos7 dockerd-current[6093]:time="2017-07-14T0...
  Jul 14 09:15:30 centos7 dockerd-current[6093]:time="2017-07-14T0...
  Jul 14 09:15:30 centos7 dockerd-current[6093]:time="2017-07-14T0...
  Jul 14 09:15:30 centos7 systemd[1]: Started DockerApplication C....
  Jul 14 09:15:30 centos7 dockerd-current[6093]:time="2017-07-14T0...
  Hint: Some lines were ellipsized, use -l to showin full.
  下载alpine镜像
  docker pull alpine
  查找 nginx 镜像文件
  [root@centos7 ~]# docker search nginx
  INDEX      NAME                                              DESCRIPTION                                     STARS     OFFICIAL  AUTOMATED
  docker.io  docker.io/nginx                                    Officialbuild of Nginx.                        6411      [OK]
  docker.io  docker.io/jwilder/nginx-proxy                      Automated Nginx reverseproxy for docker c...   1064                 [OK]
  docker.io  docker.io/richarvey/nginx-php-fpm                  Container running Nginx +PHP-FPM capable ...   406                  [OK]
  docker.io  docker.io/jrcs/letsencrypt-nginx-proxy-companion   LetsEncrypt container to use with nginxas...   200                  [OK]
  docker.io  docker.io/kong                                     Open-sourceMicroservice & API Management ...  88        [OK]
  docker.io  docker.io/webdevops/php-nginx                      Nginx with PHP-FPM                              85                   [OK]
  docker.io  docker.io/bitnami/nginx                           Bitnami nginx DockerImage                      30                   [OK]
  docker.io  docker.io/linuxserver/nginx                        An Nginx container,brought to you by Linu...   20
  docker.io  docker.io/tutum/nginx                              Base Docker Image to runNginx server           10
  docker.io  docker.io/webdevops/nginx                          Nginx container                                 8                    [OK]
  docker.io  docker.io/blacklabelops/nginx                      Dockerized Nginx ReverseProxy Server.          5                    [OK]
  docker.io  docker.io/nginxdemos/nginx-ingress                 NGINX Ingress Controller forKubernetes         5
  docker.io   docker.io/1science/nginx                           Nginx Docker imagesthat include Consul Te...   4                    [OK]
  docker.io  docker.io/ixbox/nginx                              Nginx on AlpineLinux.                          3                    [OK]
  docker.io  docker.io/nvucinic/nginx                           Simple nginximage                              3
  docker.io  docker.io/phpdockerio/nginx                        Note: image is nowdeprecated, here only t...   2                    [OK]
  docker.io  docker.io/pebbletech/nginx-proxy                   nginx-proxy sets up acontainer running ng...   1                    [OK]
  docker.io  docker.io/schmunk42/nginx                          Legacy nginximage                              1
  docker.io  docker.io/xutongle/nginx                           nginx http                                      1                    [OK]
  docker.io  docker.io/jenkler/nginx                            Docker Nginxpackage                            0
  docker.io  docker.io/mailu/nginx                              Mailu nginxfrontend                            0                    [OK]
  docker.io  docker.io/tcaxias/nginx                            Nginx container toserver static content w...   0                    [OK]
  docker.io  docker.io/travix/nginx                             NGinx reverseproxy                             0                    [OK]
  docker.io  docker.io/vukor/nginx                             Build for Nginx. Projectavailable on http...   0                    [OK]
  docker.io  docker.io/watsco/nginx                            nginx:1.11-alpine                               0                    [OK]
  下载nginx镜像文件
  docker pull nginx
  查看本机下载好的镜像
  docker images
  导出操作
  docker save nginx >/tmp/nginx.tar.gz
  [root@centos7 ~]# cd /tmp/
  [root@centos7 tmp]# ll
  total 108608
  -rw-r--r-- 1 root root 111210496 Jul 14 09:57 nginx.tar.gz
  drwx------ 2 root root         6 Jul 14 09:15tmp.hB45j5rpnN
  [root@centos7 tmp]# tar xf nginx.tar.gz
  tar: manifest.json: implausibly old time stamp1970-01-01 08:00:00
  tar: repositories: implausibly old time stamp1970-01-01 08:00:00
  删除镜像的操作(能不用尽量不用)
  docker rmi nginx
  导入镜像的操作
  docker load < /tmp/nginx.tar.gz
  镜像的常见操作五个操作步骤
  1 搜索
  2 下载
  3 导入
  4 导出
  5 删除
  默认存储的目录/var/lib/docker/
  更换存储目录
  --graph=/opt/docker
  dns服务
  默认docker是采用宿主机的dns
  可以采用--dns=xxxx的方式制定
  docker daemon --help 查看docker 的帮助
  dockerrun alpine sh
  (run = cleate+ start)
  进入容器
dockerrun -it alpine sh
  docker run- 运行一个容器
  -t  分配一个(伪)tty(link is external)
  -i  交互模式 (sowe can interact with it)
  正在运行的容器有那些
  docker ps
  想要退出但是还想容器正在运行的方法
  按住ctrl不放手,按一下p 按一下q 就好了。
  显示所有的容器(不管关闭还是打开)
  docker ps -a
  [root@centos7 docker]# docker ps -a
  CONTAINER ID       IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
  1a7da0cfb507       alpine             "sh"                3minutes ago       Exited (0) 3 minutesago                       reverent_darwin
  a5059f339762       alpine             "sh"                3minutes ago       Exited (0) 3 minutesago                       compassionate_rosalind
  28d29bfdbe90       alpine             "sh"                5minutes ago       Up 5 minutes                                   condescending_chandrasekhar
  805ae1d79c82       alpine              "sh"                10 minutes ago      Exited (0) 6 minutes ago                        elegant_ramanujan
  5b0339fee0d8       alpine             "sh"                10minutes ago      Exited (0) 10 minutesago                       drunk_cori
  073ab3b420bc        alpine              "sh"                10 minutes ago      Exited (0) 10 minutes ago                       goofy_swirles
  删除容器(删除前面-a查到的ID号就可以)
  docker rm 073ab3b420bc
  正在运行的容器删不了的话
  docker rm -f  ID号(加上-f强制删除)
  指定容器名进行创建容器
  docker run -it --name mynginx nginx
  inspect查看容器的详细信息
  docker inspect mynginx
  --rm退出时自动进行删除
  docker run -it --rm --name mynginx nginx
  进入容器进行操作的三种方式
  方法一:
  attach  不推荐
  docker attcah 容器名/ID  这种实时操作,别的终端也能看见你操作的内容
  方法二:
  exec 比较推荐
  docker exec -it 容器名/ID sh
  优点: 不会对其他用户有影响(操作层面)
  第三种:
  通过查看容器的空间进行进入
  得先安装 yum install util-linux命令
  开两个xshell窗口 一个执行下面的打开容器的命令
  [root@centos7 docker]# docker run -it --rm --name mynginx nginx
  另一个编写一个脚本
  [root@centos7 ~]# cat docker_in.sh
  #!/bin/bash
  pid=`docker inspect --format"``.`State`.`Pid`" $1`
  nsenter -t $pid -m -u -i -n -p
  sh docker_in.sh 容器名/ID
  这样就进入了容器
  后台运行容器的操作命令
  docker run -it -d --name mynginx nginx
  查看当前访问的日志(只能查看最后一条)
  docker logs mynginx
  临时开一终端,实时查看当前访问的日志
  docker logs  -f mynginx
  杀死容器
  docker kill xxx
  关闭容器
  docker stop xxx
  -v 挂载
  docker run -it --rm -v/opt/nginx:/usr/share/nginx/html -p80:80 nginx
  删除的话需要加v
  docker rm -fv 容器名/ID
docker 镜像制作
  简单的制作镜像的方式
  以centos为基础
  先执行
  docker pull centos
  然后在run一个容器
  docker run -it centos bash
  就进入了容器
  下载wget的yum源
  cd /etc/yum.repos.d/
  yum install wget -y
  rm -rf *
  wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
  wget -O /etc/yum.repos.d/epel.repohttp://mirrors.aliyun.com/repo/epel-7.repo
  下载nginx 服务,因为我们要做一个nginx镜像
  yum install nginx -y
  下载完成后修改配置文件
  vi /etc/nginx/nginx.conf
  在user nginx;
  添加 daemon off;
  [root@d4bbca6b4a94 yum.repos.d]# cat/etc/nginx/nginx.conf
  # For more information on configuration, see:
  #   *Official English Documentation: http://nginx.org/en/docs/
  #   *Official Russian Documentation: http://nginx.org/ru/docs/
  user nginx;
  daemon off;
  worker_processes auto;
  error_log /var/log/nginx/error.log;
  pid /run/nginx.pid;
  nginx -t检查
  在执行 nginx
  如果卡的不动说明执行成功了。
  docker commit --help 查看帮助
  [root@centos7 ~]# docker commit --help
  Usage:  dockercommit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
  Create a new image from a container's changes
  Options:
  -a,--author string    Author (e.g.,"John Hannibal Smith <hannibal@a-team.com>")
  -c,--change value     Apply Dockerfileinstruction to the created image (default [])
  --help             Print usage
  -m,--message string   Commit message
  -p,--pause            Pause container duringcommit (default true)
  -a,作者字符串作者(例如,“John Hannibal Smith的”,“他的团队”
  -c——更改值将Dockerfile指令应用到创建的映像(默认)
  ——帮助打印使用
  -m,消息字符串提交消息
  -p,在提交期间暂停暂停容器(默认true)
  容器制作镜像的过程
  添加镜像
  docker commit -m 'add nginx images' 容器名/ID 镜像名:TAG号(自己可以添加)
  docker commit -m 'add nginx images' mynginx lsy/my_nginx:V1
  检查镜像是否添加成功
  添加完成后docker images查看 是否添加成功
  [root@centos7 ~]# docker commit -m 'add nginx images'mynginx lsy/my_nginx:V1
  sha256:5f22d143d7d83723af8025cbb0cbdc8fdb882cd2613a9594759957633402b12d
  [root@centos7 ~]# docker images
  REPOSITORY         TAG                 IMAGE ID            CREATED             SIZE
  lsy/my_nginx       V1                  5f22d143d7d8        10 seconds ago      107.5 MB
  docker.io/nginx    latest             e4e6d42c70b3        2 daysago          107.5 MB
  docker.io/centos   latest             36540f359ca3        8 daysago          192.5 MB
  docker.io/alpine   latest             7328f6f8b418        2 weeksago         3.962 MB
  启动自己做的镜像
  docker run -d --name 自己起名字镜像的名字后面跟着执行的命令(默认没有执行的命令)
  docker run -d --name lsy_nginx lsy/my_nginx:V1 nginx
  [root@centos7 ~]# docker run -d --name lsy_nginxlsy/my_nginx:V1 nginx
  [root@centos7 ~]# docker ps -a
  CONTAINER ID       IMAGE               COMMAND                  CREATED             STATUS                           PORTS               NAMES
  8624ad43cf1f       lsy/my_nginx:V1     "nginx"                  16 seconds ago      Exited (0) 15 seconds ago                            lsy_nginx
  57f7e7bb9bb3       nginx               "nginx -g'daemon off"   23 minutes ago      Up 23 minutes                    80/tcp              mynginx
  d4bbca6b4a94       centos              "bash"                   41 minutes ago      Up 41 minutes                                       amazing_knuth
  2fa04440346b       centos             "bash"                  55 minutes ago      Exited (0) 43minutes ago                           awesome_jones
  083631b830a7       centos             "bash"                  About an hour ago   Exited (130)About an hour ago                      berserk_montalcini
  上传镜像
  [root@centos7 ~]# docker search lsy0109lsy
  INDEX      NAME                              DESCRIPTION   STARS    OFFICIAL   AUTOMATED
  docker.io   docker.io/lsy0109lsy/lsy0109lsy  自己的镜像         0
  [root@centos7 ~]# docker search lsy0109lsy/lsy0109lsy
  INDEX      NAME                             DESCRIPTION   STARS     OFFICIAL  AUTOMATED
  docker.io  docker.io/lsy0109lsy/lsy0109lsy   自己的镜像         0
  第一步
  docker login
  输入账号 密码
  第二步:
  docker images
  获取制作的镜像的ID
  第三步:
  docker tag 镜像的ID 后面跟自己在Docker Hub注册的账号的域名
  第四步:
  docker push后面跟自己在Docker Hub注册的账号的域名
  这个时候就会上传你的镜像到网站
  自己的操作过程记录
  docker login
  输入自己的账户和密码
  

  docker images
  docker tag lsy/my_nginx:V1  docker.io/lsy0109lsy/my_nginx
  docker push docker.io/lsy0109lsy/my_nginx
  [root@centos7 ~]# docker pushdocker.io/lsy0109lsy/my_nginx
  The push refers to a repository[docker.io/lsy0109lsy/my_nginx]
  0cb915ddfd19: Layer already exists
  473c450db44d: Layer already exists
  57842ac5be45: Layer already exists
  54522c622682: Layer already exists
  latest: digest:sha256:0a07f792e691c9356fdbe01b31091ec5ef7fb92130b0cc0a06b7d15be8652965 size:1155
  先执行把容器上传到镜像
  docker commit -m "add new nginx dockerimages" my_nginx lsy/nginx:V1
  查看镜像是否上传成功,并记录一下ID号下面访问的时候会用到
  [root@docker1 ~]# docker images
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
  lsy/nginx           V1              f4a4e312ac8d        4 minutes ago       381.8 MB
  docker.io/centos    latest              36540f359ca3        10 days ago         192.5 MB
  docker.io/alpine    latest              7328f6f8b418        2 weeks ago         3.962 MB
  在访问 镜像的nginx服务
  docker run -p 80:80 --name nginx --rm f4a4e312ac8dnginx
  打开网页看是否显示(输入主机的IP地址)
  类别
  Docker
  Openstack
  部署难度
  非常简单
  组件多,部署复杂
  启动速度
  秒级
  分钟级
  执行性能
  和物理系统几乎一致
  VM会占用一些资源
  镜像体积
  镜像是MB级别
  虚拟机镜像GB级别
  管理效率
  管理简单
  组件相互依赖,管理复杂
  隔离性
  隔离性高
  彻底隔离
  可管理性
  单进程
  完整的系统管理
  网络连接
  比较弱
  借助Neutron可以灵活组件各类网络架构
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-481795-1-1.html 上篇帖子: Centos7配置docker本地仓库 下篇帖子: 部署内网Docker Registry
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表