精华内容
下载资源
问答
  • docker容器

    2019-12-10 17:49:51
    部署 docker 容器虚拟化平台 本节所讲内容: 8.1 Docker 概述 8.2 部署 docker 容器虚拟化平台 8.3 docker 平台基本使用方法 8.4 docker 镜像制作和发布方法 8.5 Container 容器端口映射 扩展: LXC 为 Linux ...

    部署 docker 容器虚拟化平台

    本节所讲内容:
    8.1 Docker 概述
    8.2 部署 docker 容器虚拟化平台 8.3 docker 平台基本使用方法
    8.4 docker 镜像制作和发布方法
    8.5 Container 容器端口映射

    在这里插入图片描述

    扩展:
    LXC 为 Linux Container 的简写。Linux Container 容器是一种内核虚拟化技术,可以提供轻量级 的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。
    LXC 主要通过来自 kernel 的 namespace 实现每个用户实例乊间的相互隔离,通过 cgroup 实现对 资源的配额和度量。

    官方网站:
    https://www.docker.com/

    在这里插入图片描述
    注:docker 服务相当于鲸鱼,container 容器就是集装箱。 container :集装箱,容器
    docker: 码头工人 源代码下载:
    https://github.com/docker/docker
    在这里插入图片描述
    源代码下载:
    https://github.com/docker/docker
    在这里插入图片描述
    8.1.1 docker 容器技术和虚拟机对比:
    相同点: docker 容器技术和虚拟机技术,都是虚拟化技术。
    在这里插入图片描述
    总结:docker 相对于 VM 虚拟机,少了虚拟机操作系统这一层,所以 docker 效率比虚拟机高
    你的物理系统启动使用几秒? 10 秒
    在 docker 上启动一个实例 1-2 秒
    在这里插入图片描述

    工作流程:服务器 A 上运行 docker Engine 服务,在 docker Engine 上启动很多容器 container , 从外网 Docker Hub 上把 image 操作系统镜像下载来,放到 container 容器运行。这样一个容器的实例 就运行起来了。
    最后,通过 Docker client 对 docker 容器虚拟化平台进行控制。

    Image 和 Container 英 /kənˈteɪnə®/ 的关系:image 可以理解为一个系统镜像,Container 是 Image 在运行时的
    一个状态。
    如果拿虚拟机作一个比喻的话,Image 就是关机状态下的磁盘文件,Container 就是虚拟机运行时的磁盘 文件,包括内存数据。

    dockerhub:dockerhub 是 docker 官方的镜像存储站点,其中提供了很多常用的镜像供用户下载, 如 ubuntu, centos 等系统镜像。通过 dockerhub 用户也可以发布自己的 docker 镜像,为此用户需要 注册一个账号,在网站上创建一个 docker 仓库。

    github :
    作为一个成功的开源人士或运维人才: 一定要注册一个 github 和 dockerhub 帐号。
    在这里插入图片描述

    docker 特性:

    • 文件系统隔离:每个进程容器运行在一个完全独立的根文件系统里。
    • 资源隔离:系统资源,像 CPU 和内存等可以分配到不同的容器中,使用 cgroup。
    • 网络隔离:每个进程容器运行在自己的网络空间,虚拟接口和 IP 地址。
    • 日志记彔:Docker 将会收集和记彔每个进程容器的标准流(stdout/stderr/stdin),用于实时检索 或批量检索。
    • 变更管理:容器文件系统的变更可以提交到新的镜像中,并可重复使用以创建更多的容器。无需使用 模板或手动配置。
    • 交互式 shell:Docker 可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性 交互 shell。
      在这里插入图片描述
      缺点局限性:
      1.Docker 用于应用程序时是最有用的,但并不包含数据。日志,跟踪和数据库等通常应放在 Docker 容器外。 一个容器的镜像通常都很小,不适合存大量数据,存储可以通过外部挂载的方式使用。比如使用: NFS,ipsan,MFS 等, -v 映射磁盘分区
      一句话:docker 另用于计算,存储交给别人。
      oracle 不适合使用 docker 来运行,太大了,存储的数据太多。

    8.2 部署 docker 容器虚拟化平台
    8.2.1 实验环境准备

    实站 1:部署 docker 容器虚拟化平台
    实验环境: CENTOS7.4 64 位 IP: 192.168.1.63
    把 docker-rpm.tar.gz 上传到 linux 系统上:
    [root@xuegod63 ~]# tar zxvf docker-rpm.tar.gz
    [root@Centos7 ~]# cd docker-rpm/
    [root@Centos7 docker-rpm]# createrepo ./ #创建yum源数据文件

    配置本地 yum 源:
    [root@xuegod63 ~]# vim /etc/yum.repos.d/docker-rpm.repo

    [docker-rpm]
    name=docker-rpm 
    baseurl=file:///root/docker-rpm
    enable=1
    gpgcheck=0
    

    [root@xuegod63 yum.repos.d]# mv CentOS-* /opt/ #移出 centos 自带的 yum 源 安装 docker 软件包
    [root@xuegod63 yum.repos.d]# yum -y install docker

    方法 2: 直接使用 centos 系统自带的 yum 源安装,比较慢
    [root@xuegod63 yum.repos.d]# yum -y install docker

    启动 docker 平台:
    [root@xuegod63 ~]# systemctl start docker #启动 docker 服务
    [root@xuegod63 ~]# systemctl enable docker #设置开机启动 docker 服务

    [root@xuegod63 ~]# docker version #显示 Docker 版本信息 Client:

    Version:	1.12.6
    API version:	1.24
    Package version:  docker-1.12.6-55.gitc4618fb.el7.centos.x86_64 Go version:	go1.8.3
    Git commit:	c4618fb/1.12.6
    Built:	Thu Sep 21 22:33:52 2017
    OS/Arch:	linux/amd64
    
    Server:
    Version:	1.12.6
    API version:	1.24
    Package version:  docker-1.12.6-55.gitc4618fb.el7.centos.x86_64 Go version:	go1.8.3
    Git commit:	c4618fb/1.12.6
    Built:	Thu Sep 21 22:33:52 2017
    OS/Arch:	linux/amd64
    

    查看 docker 信息(确认服务运行)显示 Docker 系统信息,包括镜像和容器数。
    [root@xuegod63 ~]# docker info

    Containers: 0
    Running: 0
    Paused: 0
    Stopped: 0
    Images: 0
    Server Version: 1.12.6  Storage Driver: devicemapper
    ...
    
    Data loop file: /var/lib/docker/devicemapper/devicemapper/data	#存储 docker 平台中 相关数据
    

    在这里插入图片描述
    搜索 images
    [root@xuegod63 ~]# docker search centos #从 Docker Hub 中搜索符合条件的镜像。
    在这里插入图片描述
    方法 1:从公网 docker hub 拉取(下载)image pull:拉
    [root@xuegod63 ~]# docker pull docker.io/centos

     Using default tag: latest
    Trying to pull repository docker.io/library/centos ...
    latest:	Pulling	from	docker.io/library/centosGet https://registry-1.docker.io/v2/library/centos/manifests/sha256:822de5245dc5b659df56dd 32795b08ae42db4cc901f3462fc509e91e97132dc0: net/http: TLS handshake timeout
    

    #报错了,因为网络的问题。 无法连接到 dockerhub 下载镜像。 如果你的网络没有问题,你可以 下载。
    解决:换一个 docker 下载地址
    或: 使用阿里云 docker 镜像加速,提升 pull 的速度:
    你另需要登录容器 Hub 服务 https://cr.console.aliyun.com 的控制台,使用你的支付宝帐号,第 一次登彔时,需要设置一个独立的密码,左侧的加速器帮劣页面就会显示为你独立分配的加速地址。
    在这里插入图片描述

    网易镜像:
    https://c.163.com/hub#/m/home/ #需要先注册登录上,才能打开此站点

    [root@xuegod63 ~]# vim /etc/docker/daemon.json #改成以下内容
    改: {}
    为:

    {
    "registry-mirrors":   ["https://e9yneuy4.mirror.aliyuncs.com"]
    }
    

    [root@xuegod63 ~]# systemctl daemon-reload
    [root@xuegod63 ~]# systemctl restart docker
    [root@xuegod63 ~]# docker pull docker.io/centos #再下载,就可以了。

    方法 2:把之前下载好的 image 镜像导入 image: 把 docker.io-centos.tar 镜像上传到 linux 上
    参数: -i " docker.io-centos.tar " 指定载入的镜像归档。
    [root@xuegod63 ~]# docker load -i /root/docker.io-centos.tar

    方法 3:直接下载其他站点的镜像
    [root@xuegod63 ~]# docker pull hub.c.163.com/library/tomcat:latest
    [root@xuegod63 ~]# docker images

    REPOSITORY	TAG	IMAGE ID	CREATED	SIZE
    hub.c.163.com/library/tomcat	latest	72d2be374029	4 months ago	292.4 MB
    

    查看 images 列表
    [root@xuegod63 ~]# docker images #列出本地所有镜像。其中 [name] 对镜像名称进行关键 词查询。
    [root@xuegod63 ~]# docker images

    REPOSITORY	TAG	IMAGE ID	CREATED	SIZE
    docker.io/centos	latest	8caf41e7a3ea	31 minutes ago	205.3 MB
    

    8.2.3 开启动网络转发功能
    开启动网络转发功能,默认会自动开启.
    手动开启:
    [root@xuegod63 ~]# vim /etc/sysctl.conf #插入以下内容

    net.ipv4.ip_forward = 1
    

    [root@xuegod63 ~]# sysctl -p #生效

     net.ipv4.ip_forward = 1
    

    [root@xuegod63 ~]# cat /proc/sys/net/ipv4/ip_forward
    1
    否则会报错以下警告:
    在这里插入图片描述

    8.3 docker 平台基本使用方法
    例 1:运行一个 container 并加载镜像 centos,运行起来这个实例后,在实例中执行 /bin/bash 命令
    docker 常用参数: run 运行
    -i 以交互模式运行容器,通常不 -t 同时使用;
    -t 为容器重新分配一个伪输入终端,通常不 -i 同时使用
    [root@xuegod63 ~]# docker images

    REPOSITORY	TAG	IMAGE ID	CREATED	SIZE
    docker.io/centos	latest	196e0ce0c9fb	12 days ago	196.6 MB
    

    [root@xuegod63 ~]# docker run -it docker.io/centos:latest /bin/bash #启动一个实例,
    也就 2 秒就可以搞定
    [root@068fd8c70344 /]# ls #查看实例环境
    [root@f072b5ae7542 /]# cat /etc/redhat-release
    退出容器:
    [root@f072b5ae7542 /]#exit

    例 2:在 container 中启动一个长久运行的进程,不断向 stdin 输出 hello world 。模拟一个后台 运行的服务
    docker 常用参数:

    • -d 后台运行容器,并返回容器 ID;
    • -c 后面跟待完成的命令

    [root@xuegod63 ~]# docker run -d docker.io/centos:latest /bin/sh -c "while true;do echo hello world; sleep 1; done"
    1b3493487c4fde6eb233d59fa9ab9a204ad993cd3debbd5a9a28be6816694605#容器的 ID

    从一个容器中取日志,查看输出的内容
    语法: docker logs 容器实例的 Name/ID
    [root@xuegod63 ~]# docker logs 1b3493487c4 #容器的 ID 可以写全,也可以不写全,另
    要唯一就可以了
    hello world
    hello world
    hello world
    hello world
    查看正在运行的容器:
    [root@xuegod63 ~]# docker ps #列出所有运行中容器。
    在这里插入图片描述
    也可以使用短 ID 或 docker 实例的名字查看日志输出:启动失败实例可查看失败原因
    [root@xuegod63 ~]# docker logs c4a213627f1b
    或:
    [root@xuegod63 ~]# docker logs compassionate_mclean #names

    [root@xuegod63 ~]# docker ps -a #-a 列出所有容器(包含沉睡/退出状态的容器);

    在这里插入图片描述
    [root@xuegod63 ~]# docker images #列出所有本地镜像

    REPOSITORY	TAG	IMAGE ID	CREATED	SIZE
    centos	latest	0f0be3675ebb	12 days ago	196.6 MB
    

    例 3:杀死一个容器。 比如:杀死一个正在后台运行的容器 查看要杀死容器的 ID:
    [root@xuegod63 ~]# docker ps -a #-a 列出所有容器(包含沉睡/退出状态的容器);
    在这里插入图片描述
    查看结果:
    [root@xuegod63 ~]# docker ps

    CONTAINER ID	IMAGE      COMMAND          CREATED      STATUS     PORTS	NAMES
    

    例 4:启动、停止、重启 container 容器实例 启动: run # 创建并运行 docker 实例
    [root@xuegod63 ~]# docker run -d docker.io/centos:latest /bin/sh -c “while true;do
    echo hello world; sleep 1; done” 查看容器:
    [root@xuegod63 ~]# docker stop 1a63ddea6571 # 关闭容器 1a63ddea6571
    [root@xuegod63 ~]# docker start 1a63ddea6571

    1a63ddea6571
    

    [root@xuegod63 ~]# docker restart 1a63ddea6571 #重新启动实例
    1a63ddea6571

    删除指定 container : rm
    [root@xuegod63 ~]# docker rm e085da6919af #删除实例

    Error response from daemon: You cannot remove a running container e085da6919af2f294d73f8e717f93326f6c1a803938e8057aebfc36e28d05808. Stop the container before attempting removal or use -f
    

    解决:你可以先把容器 1a63ddea6571 关闭,然后再删除或加-f 强制删除
    [root@xuegod63 ~]# docker rm -f 1a63ddea6571

    1a63ddea6571
    

    8.4 docker 镜像制作方法

    Docker Image 的制作两种方法
    方法 1:docker commit #保存 container 的当前状态到 image 后,然后生成对应的 image
    方法 2:docker build #使用 Dockerfile 文件自动化制作 image

    8.4.1 方法 1:docker commit 创建一个安装好 apache 工具的容器镜像
    [root@xuegod63 ~]# docker run -it docker.io/centos:latest /bin/bash
    [root@1d3563200047 /]# yum -y install httpd #在 container 中安装 apache 软件包 [root@1d3563200047 /]# exit

    查看 images 列表
    [root@xuegod63 ~]# docker images

    REPOSITORY	TAG	IMAGE ID	CREATED	SIZE
    docker.io/centos	latest	196e0ce0c9fb	13 days ago	196.6 MB 注:当
    前另有一个 image centos			
    

    根据容器当前状态做一个 image 镜像:创建一个安装了 apache 工具的 centos 镜像
    语法: docker commit <container 的 ID>或<image_name> 例:
    查看容器 ID:
    [root@xuegod63 ~]# docker ps -a #查看运行过的状态

    CONTAINER  ID	IMAGE	COMMAND	CREATED
    STATUS	PORTS	NAMES	
    1d3563200047	centos	"/bin/bash"	10 minutes ago
    Exited (0) 6 minutes ago			
    

    [root@xuegod63 ~]# docker commit bbd01c4b8567 docker.io/centos:apache

    sha256:e5917c01599c70d0680beeb35f6df98889dd22106399efd6907d956d8a943242 
    

    [root@xuegod63 ~]# docker images

    REPOSITORY	TAG	IMAGE  ID	CREATED SIZE
    docker.io/centos	apache	38fa5452c20d	5  seconds  ago
    304.3 MB
    docker.io/centos	latest	196e0ce0c9fb	13  days  ago
    196.6 MB
    

    使用新创建的 docker.io/centos:apache 镜像,生成一台容器实例: 镜像,生成一台容器实例:
    [root@xuegod63 ~]# docker run -it centos:apache /bin/bash
    [root@8b1afc920454 /]# rpm -qa httpd #查看,已经安装好 apache 命令
    httpd-2.4.6-67.el7.centos.2.x86_64
    注:说明基于 apache 镜像的容器创建成功。

    8.4.2 方法二:通过:docker build 创建一个基于 centos 的 httpd web 服务器镜像
    使用 docker build 创建镜像时,需要使用 Dockerfile 文件自动化制作 image 镜像 注:Dockerfile 有点像源码编译时./configure 后产生的 Makefile

    1、创建工作目录
    [root@xuegod63 ~]# mkdir /docker-build
    [root@xuegod63 ~]# cd /docker-build
    [root@xuegod63 docker-build]# touch Dockerfile
    注: make 自动化编译时需要 Makefile 文件,自动化创建 docker 镜像时,需要 Dockerfile

    2、编辑 Dockerfile
    Dockerfile 用来创建一个自定义的 image,包含了用户指定的软件依赖等。
    [root@xuegod63 docker-build]# vim Dockerfile

    FROM docker.io/centos:latest 
    MAINTAINER    <mk@xuegod.cn> 
    RUN yum -y install httpd
    ADD start.sh /usr/local/bin/start.sh
    ADD index.html /var/www/html/index.html
    

    注释:
    FROM docker.io/centos:latest # FROM 基于哪个镜像
    MAINTAINER mk@xuegod.cn # MAINTAINER 镜像创建者
    RUN yum -y install httpd #RUN 安装软件用
    ADD start.sh /usr/local/bin/start.sh
    ADD index.html /var/www/html/index.html
    # ADD 将文件拷贝到新产生的镜像的文件系统对应的路径。所有拷贝到新镜像中的 文件和文件夹权限为 0755,uid 和 gid 为 0
    CMD echo hello world #container 启动时执行的命令或启动服务,但是一个 Dockerfile 中另 能有一条 CMD 命令,多条则另执行最后一条 CMD.

    如:dockefile1 中的内容如下:

    # vim dockefile1
    FROM ubuntu
    MAINTAINER xxx
    RUN echo hello1 > test1.txt
    RUN echo hello2 > /test2.txt 
    EXPOSE 80
    EXPOSE 81
    CMD ["/bin/bash"]
    

    3、创建 start.sh 脚本启动 httpd 服务和 apache 默认首页 index.html 文件
    [root@xuegod63 docker-build]# echo "/usr/sbin/httpd -DFOREGROUND" > start.sh 注:/usr/sbin/httpd -DFOREGROUND 相当于执行了 systemctl start httpd
    [root@xuegod63 docker-build]# chmod a+x start.sh #

    创建 index.html
    [root@xuegod63 docker-build]# echo "docker image build test" > index.html

    4、使用命令 build 来创建新的 image
    语法:docker build -t 父镜像名:镜像的 tag Dockerfile 文件所在路径
    -t :表示 tage,镜像名
    例:使用命令 docker build 来创建新的 image,并命名为 docker.io/centos:httpd
    [root@xuegod63 docker-build]# docker build -t docker.io/centos:httpd ./ 注: ./ 表示当前目录。另外你的当前目录下要包含 Dockerfile

    Sending build context to Docker daemon 4.096 kB Step 1 : FROM docker.io/centos:latest
    ---> 0f0be3675ebb
    Step 2 : MAINTAINER userabc <mk@xuegod.cn>
    ---> Using cache
    ---> 9d1cc5ad2a7b
    Step 3 : RUN yum -y install httpd
     
    
    。。。
    
    Complete!
    ---> bce6b3f0a700
    Removing intermediate container c9567092d67b Step 4 : ADD start.sh /usr/local/bin/start.sh
    ---> 521463f9bbeb
    Removing intermediate container 18b34849606d Step 5 : ADD index.html /var/www/html/index.html
    ---> 585eb8e1d7ad
    Removing intermediate container ecdbd06a3c1e Successfully built 585eb8e1d7ad
    

    查看 images 列表
    [root@xuegod63 ~]# docker images

    REPOSITORY	TAG	IMAGE  ID	CREATED SIZE
    docker.io/centos	httpd	bfaf1b0488d1	31  seconds  ago
    324.5 MB
    
    注:docker 镜像=应用/程序+库
    

    8.4.3 Docker Image 的发布:

    方法 1:Save Image To TarBall
    方法 2:Push Image To Docker Hub

    方法 1:Save Image To TarBall 保存 Image 到 tar 包

    语法:docker save -o 导出的镜像名.tar    本地镜像名:镜像标签
    

    [root@xuegod63 ~]# docker save -o docker.io-centos-httpd-docker-image.tar docker.io/centos:httpd
    [root@xuegod63 ~]# ll -h

    -rw-------    1 root root 319M 12 月  27 22:48 docker.io-centos-httpd-docker-image.tar
    

    例: 使用导入本地镜像:
    [root@xuegod63 ~]# docker rmi docker.io/centos:httpd #删除镜像,这里写自己镜像的 ID 或名字 需要先删除实例/箱子。docker rm -f 实例id
    [root@xuegod63 ~]# docker images
    [root@xuegod63 docker-build]# docker load -i centos-httpd-docker-image.tar

    方法 2:Push Image To Docker Hub 发布到外网

    1、Signup on docker hub & create repo	注册一个帐号 https://hub.docker.com/
    2、Login to docker hub
    # docker login -u userabc -p abc123 -e userab@gmail.com
     
     3、Push image to docker hub	#上传镜像
    # docker push centos:httpd
    4、Pull image from docker hub	#下载镜像
    # docker pull userabc/centos:httpd	#   用户名/镜像名
    

    方法 3: 使用阿里云的私有仓库来发布,等下节讲完私有仓库的搭建,再讲

    8.5 Container 容器端口映射

    8.5.1 实站:Container 端口映射 启动 container
    [root@xuegod63 ~]#

    docker run -d  -p  80:80 docker.io/centos:httpd  /bin/bash  -c /usr/local/bin/start.sh  
    
     87fadc0249a96736f588f16b7d3ad662ef3536a06d7a74115cd7c76546ed3a22
    
    注: -p 物理机的 80 端口:容器实例的 80 端口   ,把容器中的 80 端口映射到物理机上的 80 端口
    

    在物理机上查看容易状态:
    [root@xuegod63 ~]# docker ps

    CONTAINER   I
    CREATED	D	IMAGE	COMMAND
    	STATUS	PORTS	NAMES	
    c72fdb8da879	docker.io/centos:httpd	"/bin/bash -c /usr/lo"	2 minutes ago
    Up 2 minutes	0.0.0.0:80->80/tcp	sleepy_newton	
    

    查看物理机上开启的 80 代理端口
    [root@xuegod63 ~]# netstat -antup | grep 80

    tcp6	0	0  :::80	:::*	LISTEN
    50768/docker-proxy- 
    

    测试:http://192.168.1.63

    注:现在 docker 实例运行的网络模式像 VMware 的 NAT 模式。后期会讲给 docker 配置静态 IP, 就像 VMware 的桥接模式。

    实站 6:访问正在运行的 container 容器实例

    语法:

    docker exec -it <container id | name> /bin/bash
     
    

    查看正在运行的容器 ID:
    [root@xuegod63 ~]# docker ps

    CONTAINER  ID	IMAGE	COMMAND		CREATED
    STATUS	PORTS	NAMES		
    87fadc0249a9	centos:httpd	"/bin/sh  -c  /usr/loca"	4	minutes  ago
    Up 4 minutes	0.0.0.0:9000->80/tcp	elated_perlman		
    

    [root@xuegod63 ~]# docker exec -it 87fadc0249a9 /bin/bash #进入容器

    创建 test.html 文件
    [root@87fadc0249a9 /]# echo xuegod > /var/www/html/test.html

    测试:在物理机上查看新添加的 test.html 文件
    [root@xuegod63 ~]# curl http://192.168.1.63/test.html xuegod

    展开全文
  • Docker容器

    热门讨论 2021-01-27 20:27:35
    *Docker容器技术是Kubernetes平台的基础。容器技术主要作用是隔离,通过对系统的关键资源的隔离,实现了主机抽象。Kubernetes平台则是在抽象主机的基础上,实现了集群抽象 容器,提供应用级的主机抽象;Kubernetes,...

    前言

    *Docker容器技术是Kubernetes平台的基础。容器技术主要作用是隔离,通过对系统的关键资源的隔离,实现了主机抽象。Kubernetes平台则是在抽象主机的基础上,实现了集群抽象
    容器,提供应用级的主机抽象;Kubernetes,提供应用级的集群抽象。

    *虚拟机属于虚拟化技术。而Docker这样的容器技术,也是虚拟化技术,属于轻量级的虚拟化。
    虚拟机虽然可以隔离出很多“子电脑”,但占用空间更大,启动更慢,虚拟机软件可能还要花钱(例如VMWare)。
    而容器技术恰好没有这些缺点。它不需要虚拟出整个操作系统,只需要虚拟一个小规模的环境(类似“沙箱”)。
    它启动时间很快,几秒钟就能完成。而且,它对资源的利用率很高(一台主机可以同时运行几千个Docker容器)。此外,它占的空间很小,虚拟机一般要几GB到几十GB的空间,而容器只需要MB级甚至KB级。

    核心概念

    *Docker技术的三大核心概念,分别是:
    镜像(Image)
    容器(Container)
    仓库(Repository)

    docker命令

    启动与停止

    启动docker:
    	systemctl start docker
    停止docker:
    	systemctl stop docker
    重启docker:
    	systemctl restart docker
    查看docker状态:
    	systemctl status docker
    开机启动:
    	systemctl enable docker
    查看docker概要信息
    	docker info
    查看docker帮助文档
    	docker --help
    

    镜像相关命令

     查看镜像
    	```
    	docker images
    	```
    	REPOSITORY:镜像名称
    	TAG:镜像标签
    	IMAGE ID:镜像ID
    	CREATED:镜像的创建日期(不是获取该镜像的日期)
    	SIZE:镜像大小
     搜索镜像
    	如果你需要从网络中查找需要的镜像,可以通过以下命令搜索
    	```
    	docker search 镜像名称
    	```
    	NAME:仓库名称
    	DESCRIPTION:镜像描述
    	STARS:用户评价,反应一个镜像的受欢迎程度
    	OFFICIAL:是否官方
    	AUTOMATED:自动构建,表示该镜像由Docker Hub自动构建流程创建的
    拉取镜像
    	拉取镜像就是从中央仓库中下载镜像到本地
    	```
    	docker pull 镜像名称
    	```
    	例如,我要下载centos7镜像
    	```
    	docker pull centos:7
    	```
    删除镜像
    	按镜像ID删除镜像
    	```
    	docker rmi 镜像ID
    	```
    	删除所有镜像		
    	```
    	docker rmi `docker images -q`
    	```
    

    容器相关命令

    查看容器
    	查看正在运行的容器
    	```
    	docker ps
    	```
    	查看所有容器
    	```
    	docker ps –a
    	```
    	查看最后一次运行的容器
    	```
    	docker ps –l
    	```
    	查看停止的容器
    	```
    	docker ps -f status=exited
    	```
     创建与启动容器
    	创建容器常用的参数说明
    	创建容器命令:docker run
    	 -i:表示运行容器
    	 -t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
    	 --name :为创建的容器命名。
    	 -v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
    	 -d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
    	 -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
    	(1)交互式方式创建容器
    	```
    	docker run -it --name=容器名称 镜像名称:标签 /bin/bash
    	```
    	这时我们通过ps命令查看,发现可以看到启动的容器,状态为启动状态  
    	退出当前容器
    	```
    	exit
    	```
    	(2)守护式方式创建容器:
    	```
    	docker run -di --name=容器名称 镜像名称:标签
    	```
    	登录守护式容器方式:
    	```
    	docker exec -it 容器名称 (或者容器ID)  /bin/bash
    	```
     停止与启动容器
    	
    	停止容器:
    	
    	```
    	docker stop 容器名称(或者容器ID)
    	```
    	
    	启动容器:
    	
    	```
    	docker start 容器名称(或者容器ID)
    	```
    	
     文件拷贝
    	
    	如果我们需要将文件拷贝到容器内可以使用cp命令
    	
    	```
    	docker cp 需要拷贝的文件或目录 容器名称:容器目录
    	```
    	
    	也可以将文件从容器内拷贝出来
    	
    	```
    	docker cp 容器名称:容器目录 需要拷贝的文件或目录
    	```
    	
     目录挂载
    	
    	我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。
    	创建容器 添加-v参数 后边为   宿主机目录:容器目录,例如:
    	
    	```
    	docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 centos:7
    	```
    	
    	如果你共享的是多级的目录,可能会出现权限不足的提示。
    	
    	这是因为CentOS7中的安全模块selinux把权限禁掉了,我们需要添加参数  --privileged=true  来解决挂载的目录没有权限的问题
    	
    查看容器IP地址
    	
    	我们可以通过以下命令查看容器运行的各种数据
    	
    	```
    	docker inspect 容器名称(容器ID) 
    	```
    	
    	也可以直接执行下面的命令直接输出IP地址
    	
    	```
    	docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称(容器ID)
    	```
    	
    删除容器 
    	
    	删除指定的容器:
    	
    	```
    	docker rm 容器名称(容器ID)
    	```
    

    4 应用部署

    MySQL部署
    	
    	(1)拉取mysql镜像
    	
    	```
    	docker pull centos/mysql-57-centos7
    	```
    	
    	(2)创建容器
    	
    	```
    	docker run -di --name=tensquare_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
    	```
    	
    	-p 代表端口映射,格式为  宿主机映射端口:容器运行端口
    	
    	-e 代表添加环境变量  MYSQL_ROOT_PASSWORD  是root用户的登陆密码
    	
    	(3)远程登录mysql
    	
    	连接宿主机的IP  ,指定端口为33306 
    	
     tomcat部署
    	
    	(1)拉取镜像
    	
    	```
    	docker pull tomcat:7-jre7
    	```
    	
    	(2)创建容器
    	
    	创建容器  -p表示地址映射
    	
    	```
    	docker run -di --name=mytomcat -p 9000:8080 
    	-v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:7-jre7
    	```
    	
    Nginx部署 
    	
    	(1)拉取镜像	
    	
    	```
    	docker pull nginx
    	```
    	
    	(2)创建Nginx容器
    	
    	```
    	docker run -di --name=mynginx -p 80:80 nginx
    	```
    	
    Redis部署
    	
    	(1)拉取镜像
    	
    	```
    	docker pull redis
    	```
    	
    	(2)创建容器
    	
    	```
    	docker run -di --name=myredis -p 6379:6379 redis
    	```
    

    5 迁移与备份

    容器保存为镜像
    	
    	我们可以通过以下命令将容器保存为镜像
    	
    	```
    	docker commit mynginx mynginx_i
    	```
    	
    镜像备份
    	
    	我们可以通过以下命令将镜像保存为tar 文件
    	
    	```
    	docker  save -o mynginx.tar mynginx_i
    	```
    	
    镜像恢复与迁移
    	
    	首先我们先删除掉mynginx_img镜像  然后执行此命令进行恢复
    	
    	```
    	docker load -i mynginx.tar
    	```
    	
    	-i 输入的文件
    	
    	执行后再次查看镜像,可以看到镜像已经恢复
    

    6 Dockerfile

    什么是Dockerfile
    	
    	Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。
    	
    	1、对于开发人员:可以为开发团队提供一个完全一致的开发环境; 
    	2、对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了; 
    	3、对于运维人员:在部署时,可以实现应用的无缝移植。
    	
    常用命令
    	
    	
    	
    	| 命令                                 | 作用                                 |
    	| ---------------------------------- | ---------------------------------- |
    	| FROM image_name:tag                | 定义了使用哪个基础镜像启动构建流程                  |
    	| MAINTAINER user_name               | 声明镜像的创建者                           |
    	| ENV key value                      | 设置环境变量 (可以写多条)                     |
    	| RUN command                        | 是Dockerfile的核心部分(可以写多条)            |
    	| ADD source_dir/file dest_dir/file  | 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压 |
    	| COPY source_dir/file dest_dir/file | 和ADD相似,但是如果有压缩文件并不能解压              |
    	| WORKDIR path_dir                   | 设置工作目录                             |
    	
    使用脚本创建镜像
    	
    	步骤:
    	
    	(1)创建目录
    	
    	```
    	mkdir –p /usr/local/dockerjdk8
    	```
    	
    	(2)下载jdk-8u171-linux-x64.tar.gz并上传到服务器(虚拟机)中的/usr/local/dockerjdk8目录
    	
    	(3)创建文件Dockerfile  `vi Dockerfile`
    	
    	```
    	#依赖镜像名称和ID
    	FROM centos:7
    	#指定镜像创建者信息
    	MAINTAINER ITCAST
    	#切换工作目录
    	WORKDIR /usr
    	RUN mkdir  /usr/local/java
    	#ADD 是相对路径jar,把java添加到容器中
    	ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/
    	
    	#配置java环境变量
    	ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
    	ENV JRE_HOME $JAVA_HOME/jre
    	ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
    	ENV PATH $JAVA_HOME/bin:$PATH
    	```
    	
    	(4)执行命令构建镜像
    	
    	```
    	docker build -t='jdk1.8' .
    	```
    	
    	注意后边的空格和点,不要省略
    	
    	(5)查看镜像是否建立完成
    	
    	```
    	docker images
    	```
    

    7 Docker私有仓库

    私有仓库搭建与配置
    	
    	(1)拉取私有仓库镜像(此步省略)
    	
    	```
    	docker pull registry
    	```
    	
    	(2)启动私有仓库容器
    	
    	```
    	docker run -di --name=registry -p 5000:5000 registry
    	```
    	
    	(3)打开浏览器 输入地址http://192.168.184.141:5000/v2/_catalog看到`{"repositories":[]}` 表示私有仓库搭建成功并且内容为空
    	
    	(4)修改daemon.json
    	
    	```
    	vi /etc/docker/daemon.json
    	```
    	
    	添加以下内容,保存退出。
    	
    	```json
    	{"insecure-registries":["192.168.184.141:5000"]} 
    	```
    	
    	此步用于让 docker信任私有仓库地址
    	
    	(5)重启docker 服务
    	
    	```
    	systemctl restart docker
    	```
    	
    镜像上传至私有仓库
    	
    	(1)标记此镜像为私有仓库的镜像
    	
    	```
    	docker tag jdk1.8 192.168.184.141:5000/jdk1.8
    	```
    	
    	(2)再次启动私服容器
    	
    	```
    	docker start registry
    	```
    	
    	(3)上传标记的镜像
    	
    	```
    	docker push 192.168.184.141:5000/jdk1.8
    	```
    
    展开全文
  • docker容器jvm调优 微服务是最响亮的IT流行语之一,每个人都急于尝试。 但是Linux和MacOS用户免费获得的Windows并不是那么容易。 本指南显示了如何设置Windows环境以运行Docker容器,作为微服务架构项目的基础。 ...

    docker容器jvm调优

    微服务是最响亮的IT流行语之一,每个人都急于尝试。 但是LinuxMacOS用户免费获得的Windows并不是那么容易。 本指南显示了如何设置Windows环境以运行Docker容器,作为微服务架构项目的基础。

    词汇表

    • GIT-SCM用于Windows的Git项目,包含gitbash和其他Linux工具
    • 环境变量Windows环境变量,假定通过“ 控制面板”进行管理

    实际上,用于Windows Docker Toolbox包含用于运行Docker容器的所有内容,因为它与GIT-SCM项目捆绑在一起。 不幸的是,默认安装没有几个缺点

    • 即使已经安装了较新的版本,也无法跳过捆绑的GIT SCM安装
    • 没有用于更改GIT SCM目的地的选项
    • 尚未将ommand行工具添加到PATH环境变量中
    • 与原始GIT-SCM安装程序不同,无法配置其他git参数

    为了克服这些问题并获得更好的环境灵活性,我将在本指南中以更长的方式进行说明,其中所有必需的软件将从单独的捆绑软件中安装。

    遵循老习惯,我倾向于避免安装计划从命令行使用的工具到C:\Program Files\文件夹。 相反,我使用的是c:\optd:\usr等,即文件夹名称不带空格。 本指南将重点介绍计划将软件安装在不同于C:\Program Files\文件夹中的步骤。

    设置MSYS2

    MSYS2GIT-SCM的基础项目,它具有优于GIT-SCM的优势,

    优势超过

    单片机

    • 更面向命令行,不仅限于git使用
    • 符号链接支持
    • 内置的软件包管理器pacman ,从Arch Linux发行版移植而来
      • 可以安装MSYS2分发版中未包含的任意工具
      • 从命令行升级MSYS2核心的可能性

    安装步骤

    1. https://msys2.github.io/运行安装程序,并按照说明进行操作
    2. 使用d:\opt\msys作为目标文件夹
    3. 安装完成后,将d:\opt\msys\usr\binPATH环境变量中

    默认情况下, MSYS2使用自己的目录作为用户主目录,因此, C:\Users\您的主目录将位于d:\opt\msys\home文件夹中。 通过将环境变量HOME设置为首选值,可以覆盖此行为。

    设置Docker工具箱

    安装步骤

    1. https://www.docker.com/docker-toolbox运行Windows安装程序并按照说明进行操作
    2. 使用d:\opt\docker作为目标文件夹
    3. 安装完成后,请通过控制面板卸载GIT SCM ,我们将使用MSYS2安装的MSYS2

    设置控制台

    MSYS2提供了运行bash可能性,但是一旦您运行许多控制台,您就会开始迷失在那些浮动窗口中。 ConEmu抢先一步,为bash shell提供了舒适的选项卡式界面以及其他功能,这些功能可改善命令行体验并在Windows上更好地集成。

    1. https://conemu.github.io/运行安装程序,并按照说明进行操作,可以使用Alpha版本
    2. 创建ConEmu任务以运行bash控制台并在程序启动时运行它

      图1.运行MSYS2的ConEmu任务

      图1.运行MSYS2的ConEmu任务

    3. 在单个ConEmu窗口中创建新的控制台

      图2. ConEmu单窗口设置

      图2. ConEmu单窗口设置

    4. Windows Shell集成,环境变量CHERE_INVOKING强制MSYS2将当前目录用作新bash实例的工作目录

      图3. ConEmu shell集成设置

      图3. ConEmu shell集成设置

      图4. ConEmu shell集成

      图4. ConEmu shell集成

    验证一切正常

    1. 启动ConEmu程序(应从在新标签页中运行的bash控制台开始)
    2. 使用Ctrl+X热键在ConEmu打开新控制台,这只是检查Ctrl+X工作原理
    3. 转到/d/opt/docker/文件夹并在其中运行./start.sh
    4. 执行docker run hello-world命令
    5. 检查输出,如下所示,有关输出的最新实际信息,请参阅《 Docker指南》
    $ docker run hello-world
    
    Hello from Docker.
    This message shows that your installation appears to be working correctly.
    
    To generate this message, Docker took the following steps:
     1. The Docker client contacted the Docker daemon.
     2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
     3. The Docker daemon created a new container from that image which runs the
        executable that produces the output you are currently reading.
     4. The Docker daemon streamed that output to the Docker client, which sent it
        to your terminal.
    
    To try something more ambitious, you can run an Ubuntu container with:
     $ docker run -it ubuntu bash
    
    Share images, automate workflows, and more with a free Docker Hub account:
     https://hub.docker.com
    
    For more examples and ideas, visit:
     https://docs.docker.com/userguide/

    码头工人机床

    Docker Toolbox将安装VirtualBox并在其中创建自己的VM,名为default 。 尽管可以通过VirtualBox UI执行VM管理,但是还是有有用的docker-machine工具。 它允许从命令行与VirtualBox VM进行交互。 一些有用的命令如下所示。

    • $ docker-machine ls –列出机器及其状​​态
    • $ docker-machine stop default -停止默认VirtualBox VM
    • $ docker-machine start default –启动默认的VirtualBox VM
    • $ docker-machine help –有关更多信息

    改善Windows上的Git体验

    如果您打算使用git注意以下步骤,否则可以跳过本节。

    行尾

    GIT-SCM以及其他消息来源建议在Windows上使用git时使用core.autocrlf等于true 。 执行以下命令以为所有git存储库设置此参数。
    $ git config --global core.autocrlf true

    密码缓存

    通过HTTP / HTTPS使用远程存储库需要输入用户名密码。 最好使用可缓存密码的凭据帮助程序,因此无需每次都键入密码。 对于GitHub这很容易, 本文对此进行了说明 。 但是这种方法不适用于BitBucket存储库。

    适用于Windows的Git Credential Manager项目在GitHubBitBucket上均可正常使用,但当前只能与通过GIT-SCM安装的git配合使用- 跟踪问题

    解决方案是使用适用于Windows的Git Credential Manager的前身版本 ,该版本在任何git安装中均可正常运行。

    聚苯乙烯

    这是有关基于微服务架构的基于JVM的项目的第一篇文章,该项目主要与Windows特定功能有关。

    下一篇文章将解释如何使用本指南中描述的环境创建和运行示例项目。

    敬请关注。

    翻译自: https://www.javacodegeeks.com/2015/11/jvm-microservices-run-docker-containers-windows.html

    docker容器jvm调优

    展开全文
  • Docker容器简介、优缺点与安装

    千次阅读 2020-04-21 10:55:25
    Docker 是一个开源的应用容器引擎, 是一种运行于 Linux 和 Windows 上的软件,用于创建、管理和编排容器,基于 Go 语言 并遵从 Apache2.0 协议开源,是在 GitHub 上开发的 Moby 开源项目的一部分。 Docker 可以让...

    1 Docker简介

    Docker 是一个开源的应用容器引擎, 是一种运行于 Linux 和 Windows 上的软件,用于创建、管理和编排容器,基于 Go 语言 并遵从 Apache2.0 协议开源,是在 GitHub 上开发的 Moby 开源项目的一部分。

    Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

    容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

    Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版)

    Docker 公司位于旧金山,由法裔美籍开发者和企业家 Solumon Hykes 创立,其标志如下图所示。
    docker logo
    Docker 公司起初是一家名为 dotCloud 的平台即服务(Platform-as-a-Service, PaaS)提供商。底层技术上,dotCloud 平台利用了 Linux 容器技术。为了方便创建和管理这些容器,dotCloud 开发了一套内部工具,之后被命名为“Docker”。

    1.1 Docker的应用场景

    1.简化不同环境配置差异
    虚拟机的最大好处是能在你的硬件设施上运行各种配置不一样的平台(软件, 系统), Docker在降低额外开销的情况下提供了同样的功能. 它能让你将运行环境和配置放在代码汇总然后部署, 同一个Docker的配置可以在不同的环境环境中使用, 这样就降低了硬件要求和应用环境之间耦合度。

    2.代码流水线管理
    代码从开发者的机器到最终在生产环境上的部署, 需要经过很多的中间环境,而每一个中间环境都有自己微小的差别, Docker给应用提供了一个从开发到上线均一致的环境, 让代码的流水线变得简单不少。

    3.提升开发效率
    不同环境中, 开发者的共同目标:
    (1)让开发环境尽量贴近生产环境.
    (2)快速搭建开发环境
    开发环境的机器通常内存比较小, 之前使用虚拟的时候, 我们经常需要为开发环境的机器加内存, 而现在Docker可以轻易的让几十个服务在Docker中跑起来。

    4.隔离应用
    开发时会在一个台机器上运行不同的应用.
    (1) 为了降低成本, 进行服务器整合
    (2)将一个整体式的应用拆分成低耦合的单个服务(微服务架构)

    5.整合服务器
    Docker隔离应用的能力使得Docker可以整合多个服务器以降低成本。由于没有多个操作系统的内存占用, 以及能在多个实例之间共享没有使用的内存, Docker可以比虚拟机提供更好的服务器整合解决方案。

    6.调试能力
    Docker提供了很多的工具, 这些工具不一定只是针对容器, 但是却适用于容器. 他们提供了很多功能, 包括可以为容器设置检查点, 设置版本, 查看两个容器之间的差别, 这些特性可以帮助调试Bug.

    7.多租户环境
    多租户环境的应用中, 它可以避免关键应用的重写.我们一个特别的关于这个场景的例子是为loT(物联网)的应用开发一个快速, 易用的多租户环境. 这种多租户的基本代码非常复杂, 很难处理, 重新规划以应用不但消耗时间, 也浪费金钱.

    使用Docker, 可以为每一个租户的应用层的多个实例创建隔离的环境, 这不仅简单而且成本低廉, 因为Docker环境启动的速度快, diff命令很高效.

    8.快速部署
    Docker为进程创建一个容器, 不需要启动一个操作系统, 时间缩短为秒级别.
    可以在数据中心创建销毁资源而无须担心重新启动带来的开销. 通常数据中心的资源利用率只有30% , 通过使用Docker并进行有效的资源分配可以提高资源的利用率。

    9.环境标准化和版本控制
    Docker容器可以在不同的开发与产品发布生命周期中确保一致性,进而标准化你的环境。除此之外,Docker容器还可以像git仓库一样,可以让你提交变更到Docker镜像中并通过不同的版本来管理它们。设想如果你因为完成了一个组件的升级而导致你整个环境都损坏了,Docker可以让你轻松地回滚到这个镜像的前一个版本。这整个过程可以在几分钟内完成,如果和虚拟机的备份或者镜像创建流程对比,那Docker算相当快的,它可以让你快速地进行复制和实现冗余。此外,启动Docker就和运行一个进程一样快。

    1.2 Docker 的优缺点

    优点

    • 跨平台可移植性:按统一标准打包(镜像中),可传播。
    • 面向应用:优化部署应用(设计哲学)→API,接口及文档(体现)。
    • 版本控制:追踪、查询、记录版本信息(应用程序更改史)和回滚版本等
    • 组件复用:组件式搭建(基础镜像)→Python(运行环境) | postgreasql(基础镜像)。
    • 共享性:公共的注册服务器(可免费下载源码)。

    缺点
    Docker 的安装非常容易.目前,Docker支持所有的Linux系列系统,(Ubuntu,RHEL,Debian等).通过Boot2Docker虚拟工具,在OS X 和 Windows下也能够正常运行Docker.
    注: Docker运行环境的限制:

    • 必须是64位机器上运行,目前仅支持 x86_64和AMD64,32系统不支持.
    • 系统的Linux内核必须是3.8或者更高,内核支持Device Mapper,AUFS,VFS,btrfs等存储格式.
    • 内核必须支持cgroups和命名空间.

    1.3 Docker 运行时与编排引擎

    多数技术人员在谈到 Docker 时,主要是指 Docker 引擎。

    Docker 引擎是用于运行和编排容器的基础设施工具。有 VMware 管理经验的读者可以将其类比为 ESXi。

    ESXi 是运行虚拟机的核心管理程序,而 Docker 引擎是运行容器的核心容器运行时。

    其他 Docker 公司或第三方的产品都是围绕 Docker 引擎进行开发和集成的。

    如下图所示,Docker 引擎位于中心,其他产品基于 Docker 引擎的核心功能进行集成。
    Docker 引擎位于中心
    Docker 引擎可以从 Docker 网站下载,也可以基于 GitHub 上的源码进行构建。无论是开源版本还是商业版本,都有 Linux 和 Windows 版本。

    Docker 引擎主要有两个版本:企业版(EE)和社区版(CE)。

    每个季度,企业版和社区版都会发布一个稳定版本。社区版本会提供 4 个月的支持,而企业版本会提供 12 个月的支持。

    社区版还会通过 Edge 方式发布月度版。

    从 2017 年第一季度开始,Docker 版本号遵循 YY.MM-xx 格式,类似于 Ubuntu 等项目。例如,2018 年 6 月第一次发布的社区版本为 18.06.0-ce。

    注:2017 年第一季度以前,Docker 版本号遵循大版本号.小版本号的格式。采用新格式前的最后一个版本是 Docker 1.13。

    2. Docker的安装

    Docker 可以安装在 Windows、Mac、 Linux 系统之上。
    既可以在云上安装,也可以在个人笔记本电脑上安装。

    2.1 Ubuntu 安装 Docker

    安装新版本的Docker之前,需要先检查是否已安装旧版本的Docker,如果已安装先卸载。
    Docker 的旧版本被称为 docker,docker.io 或 docker-engine 。如果已安装,请卸载它们:

    $ apt-get remove docker docker-engine docker.io containerd runc
    

    使用 Docker 仓库进行安装

    在新主机上首次安装 Docker Engine-Community 之前,需要设置 Docker 仓库。之后,您可以从仓库安装和更新 Docker 。

    (1)设置仓库

    更新 apt 包索引。

    $ apt-get update
    

    安装 apt 依赖包,用于通过HTTPS来获取仓库:

    $ apt-get install \
      apt-transport-https \
      ca-certificates \
      curl \
      gnupg-agent \
      software-properties-common
    

    添加 Docker 的官方 GPG 密钥:

    $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
    

    9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 通过搜索指纹的后8个字符,验证您现在是否拥有带有指纹的密钥。

    root@ubuntu:~# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    OK
    root@ubuntu:~# apt-key fingerprint 0EBFCD88
    pub   rsa4096 2017-02-22 [SCEA]
          9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
    uid           [ unknown] Docker Release (CE deb) <docker@docker.com>
    sub   rsa4096 2017-02-22 [S]
    

    使用以下指令设置稳定版仓库

    $ add-apt-repository \
       "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
      $(lsb_release -cs) \
      stable"
    

    (2)安装 Docker Engine-Community

    更新 apt 包索引。

    $ apt-get update
    

    安装最新版本的 Docker Engine-Community 和 containerd ,或者转到下一步安装特定版本:

    $ apt-get install docker-ce docker-ce-cli containerd.io
    

    要安装特定版本的 Docker Engine-Community,请在仓库中列出可用版本,然后选择一种安装。列出您的仓库中可用的版本:

    使用第二列中的版本字符串安装特定版本,例如 18.06.1~ce~3-0~ubuntu

    $ apt-cache madison docker-ce
    
      docker-ce | 5:18.09.1~3-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu  xenial/stable amd64 Packages
      docker-ce | 5:18.09.0~3-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu  xenial/stable amd64 Packages
      docker-ce | 18.06.1~ce~3-0~ubuntu       | https://download.docker.com/linux/ubuntu  xenial/stable amd64 Packages
      docker-ce | 18.06.0~ce~3-0~ubuntu       | https://download.docker.com/linux/ubuntu  xenial/stable amd64 Packages
      ...
      
    $ apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io  
    

    安装完成后,运行下面的命令,验证是否安装成功。

    $ docker version
    #或者 
    $ docker info
    

    2.2 CentOS 安装 Docker

    Docker 支持以下的 64 位 CentOS 版本:

    CentOS 7
    CentOS 8
    更高版本…
    该 centos-extras 库必须启用。默认情况下,此仓库是启用的,但是如果已禁用它,则需要重新启用它。

    卸载旧版本
    较旧的 Docker 版本称为 docker 或 docker-engine 。如果已安装这些程序,请卸载它们以及相关的依赖项。

    $ yum remove docker \
                      docker-client \
                      docker-client-latest \
                      docker-common \
                      docker-latest \
                      docker-latest-logrotate \
                      docker-logrotate \
                      docker-engine
    

    安装 Docker Engine-Community
    使用 Docker 仓库进行安装
    在新主机上首次安装 Docker Engine-Community 之前,需要设置 Docker 仓库。之后,您可以从仓库安装和更新 Docker。

    设置仓库

    安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。

    $ yum install -y yum-utils \
      device-mapper-persistent-data \
      lvm2
    

    使用以下命令来设置稳定的仓库。

    $ yum-config-manager \
        --add-repo \
        https://download.docker.com/linux/centos/docker-ce.repo
    

    安装 Docker Engine-Community
    安装最新版本的 Docker Engine-Community 和 containerd,或者转到下一步安装特定版本:

    $ yum install docker-ce docker-ce-cli containerd.io
    

    如果提示您接受 GPG 密钥,请选是。

    有多个 Docker 仓库吗?
    如果启用了多个 Docker 仓库,则在未在 yum install 或 yum update
    命令中指定版本的情况下,进行的安装或更新将始终安装最高版本,这可能不适合您的稳定性需求。

    Docker 安装完默认未启动。并且已经创建好 docker 用户组,但该用户组下没有用户。

    要安装特定版本的 Docker Engine-Community,请在存储库中列出可用版本,然后选择并安装:
    1、列出并排序您存储库中可用的版本。此示例按版本号(从高到低)对结果进行排序。

    $ yum list docker-ce --showduplicates | sort -r
    
    docker-ce.x86_64  3:18.09.1-3.el7                     docker-ce-stable
    docker-ce.x86_64  3:18.09.0-3.el7                     docker-ce-stable
    docker-ce.x86_64  18.06.1.ce-3.el7                    docker-ce-stable
    docker-ce.x86_64  18.06.0.ce-3.el7                    docker-ce-stable
    

    2、通过其完整的软件包名称安装特定版本,该软件包名称是软件包名称(docker-ce)加上版本字符串(第二列),从第一个冒号(:)一直到第一个连字符,并用连字符(-)分隔。例如:docker-ce-18.09.1

    $ yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
    

    启动 Docker。

    $ systemctl start docker
    

    通过运行 hello-world 映像来验证是否正确安装了 Docker Engine-Community 。

    $ docker run hello-world
    
    展开全文
  • Docker容器部署

    2021-07-20 10:10:20
    Docker容器部署一、了解docker1. 镜像(Image)——一个特殊的文件系统2. 容器(Container)——镜像运行时的实体3. 仓库(Repository)——集中存放镜像文件的地方二、容器配置三、docker镜像1.镜像的分层结构 一、...
  • DOCKER容器监控

    2019-10-31 09:21:42
    docker container top 容器名称 查看各个容器硬件使用情况 docker container stats sysdig实时监控(仅支持原生容器) 安装内核包 yum -y install kernel-devel 复制3.10.0-327.el7.x86_64...
  • 目录1、Docker 概述1.1 Docker 介绍1.2 Docker 容器技术和虚拟机对比1.3 Docker 架构1.4 Docker 特性1.5 Docker 版本简单介绍2、部署 docker 容器虚拟化平台幵配置 docker 镜像加速地址2.1 实验环境准备2.2 下载 ...
  • 前文回顾: 初识 Docker 与安装 | Docker 系列 使用 Docker 镜像 | Docker 系列 有了镜像的基础,下面就开始创建容器吧。...-t 参数让 Docker 分配一个伪终端,并绑定到容器的标准输入上,-i 参数让容器的标准输入持
  • Docker默认的网络环境下,单台主机上的Docker容器可以通过docker0网桥直接通信,而不同主机上的Docker容器之间只能通过在主机上做端口映射进行通信。这种端口映射方式对很多集群应用来说极不方便。如果能让Docker...
  • Docker 容器学习

    2021-02-03 15:21:23
    Docker本身并不是容器,它是创建容器的工具,是应用容器引擎。 使用最广泛的开源容器引擎 一种操作系统轻量级的虚拟化技术 依赖于Linux内核特性:Namespace和Cgroups 一个简单的应用程序打包工具 Docker技术的三...
  • docker容器网络

    2020-08-28 20:06:49
    docker容器网络 Docker 安装时会自动在 host 上创建三个网络,可用 docker network ls 命令查看: [root@localhost ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 8b50afaba401 bridge bridge local 785bf824...
  • Docker容器技术

    2020-11-01 23:54:18
    什么是容器容器是基于镜像启动的) 容器技术已经成为应用程序封装和交付的核心技术...Docker提供了一组命令可以让用户更加方便直接的使用容器技术而不需要过多的关心底层内核技术 Docker 优点 相比于传统的虚拟化技术
  • Docker容器链接是要理解的重要概念,因为生产中的任何应用程序通常都将在跨多个主机的容器集群上运行。 但是,简单的容器链接不允许跨主机通信。 Docker容器链接有什么问题? Docker容器可以彼此通信,如技术提示...
  • docker容器学习

    2021-09-04 14:17:35
    docker学习简介为什么要出现DockerDocker理念和Linux部署程序有何区别镜像是什么常用命令基础命令镜像命令容器命令DockerFile解析什么是DockerFileDockerFile构建过程和执行流程DockerFile体系结构(保留字指令)常用...
  • Docker Swarm是Docker官方的三剑客项目之一,提供Docker容器集群服务,是Docker官方对容器云生态进行支持的核心方案。使用它,可以将多个Docker主机封装为单个大型的虚拟Docker主机,快速打造一套容器云平台。 1、...
  • 不少刚接触Docker的同学,通常面对docker容器起不来,或者一直在重复启动中不知措施。 docker提供了一系列简单命令,很容易调试容器运行中的问题。 原理很简单,就是可以直接输出容器运行时(或过去式的)的日志。...
  • docker容器连接

    千次阅读 2016-11-15 14:58:02
    除了暴露端口的通信方式,还可以通过容器连接来实现容器间的通信。–link 容器名:别名 //创建一个容器 docker run -d --name dbdata training/postgres //创建一个web容器,将其连接到dbdata上 docker run -d -...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,938
精华内容 6,775
关键字:

docker容器的缺点