创建docker
创建docker
准备实验环境
1. 安装前准备
Centos7 Linux 内核:官方建议 3.10 以上,3.8以上貌似也可。
1.1 查看当前的内核版本
uname -r

1.2 使用 root 权限更新 yum 包
yum -y update
这个命令不是必须执行的,看个人情况,后面出现不兼容的情况的话就必须update了
注意
yum -y update:升级所有包同时也升级软件和系统内核;
yum -y upgrade:只升级所有包,不升级软件和系统内核
1.3 卸载旧版本(如果之前安装过的话)
yum remove docker docker-common docker-selinux docker-engine
2. 安装Docker的详细步骤
2.1 安装需要的软件包
yum-util 提供yum-config-manager功能,另两个是devicemapper驱动依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
2.2 设置 yum 源
设置一个yum源,下面两个都可用
(中央仓库)
yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo
(阿里仓库)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

假如出现报错信息
except yum.Errors.RepoError, e:

原因:
yum采用Python作为命令解释器,而我们将Python升级为Python3之后,由于python版本之间兼容性不太好,使得2.X版本与3.0版本之间存在语法不一致问题,CentOS 7自带的yum采用的是python2.7,当系统将python升级到3.7后,出现语法解释错误.
修改方式
到指定文件添加2.7版本的注明,使用旧版本
vi /usr/bin/yum-config-manager

2.3 选择docker版本并安装
2.3.1 查看可用版本有哪些
yum list docker-ce --showduplicates | sort -r

2.3.2 选择一个版本并安装:
yum install docker-ce-版本号
当然也可以不选,让它自己选择最新的。
yum install docker-ce

2.3.3 启动 Docker 并设置开机自启
systemctl start dockersystemctl enable docker

运行第一个容器
环境就绪,马上运行第一个容器,执行命令:
docker run -d -p 80:80 httpd
结果会出现如下图类似的画面

其过程可以简单地描述为:
- Unable to find image ' httpd: latest' locally
- 无法在本地找到图像' httpd: latest'
- latest: Pulling from library/httpd
- 从Docker Hub下载httpd镜像。镜像中已经安装好了Apache HTTP Server。
- Status: Downloaded newer image for httpd: latest
- 启动httpd容器,并将容器的80端口映射到host的80端口。
下面可以通过浏览器验证容器是否正常工作。
在浏览器中输入http://[对应ip]/,如下图所示。
可以访问容器的HTTP服务了,看到上图所示的页面,表示第一个容器运行成功!

注意:如果访问不了,请查看防火墙是否阻拦
镜像下载加速
由于Docker Hub的服务器在国外,下载镜像会比较慢。
DaoCloud为我们提供了免费的国内镜像服务。
使用镜像服务
- 在daocloud.io免费注册一个用户。
- 登录后,单击顶部菜单“加速器”。
- copy“加速器”命令并在host中执行

- copy“加速器”命令并在host中执行
- 重启Docker deamon
systemctl daemon-reload
systemctl restart docker
容器是如何工作的
1.Docker架构
Docker的核心组件包括:
● Docker客户端:Client
● Docker服务器:Docker daemon
● Docker镜像:Image
● Registry
● Docker容器:Container

Docker采用的是Client/Server架构。
客户端向服务器发送请求,服务器负责构建、运行和分发容器。
客户端和服务器可以运行在同一个Host上,客户端也可以通过socket或REST API与远程的服务器通信。
2.Docker客户端
最常用的Docker客户端是docker命令。
通过docker我们可以方便地在Host上构建和运行容器。
docker支持很多操作(子命令)。

除了docker命令行工具,用户也可以通过REST API与服务器通信。
3.Docker服务器
Docker daemon是服务器组件,以Linux后台服务的方式运行。

Docker daemon运行在Docker host上,负责创建、运行、监控容器,构建、存储镜像。
默认配置下,Docker daemon只能响应来自本地Host的客户端请求。如果要允许远程客户端请求,需要在配置文件中打开TCP监听,步骤如下:
1.编辑配置文件
/etc/systemd/system/multi-user.target.wants/docker.service,在环境变量ExecStart后面添加 -H tcp://0.0.0.0,允许来自任意IP的客户端连接。

2.重启Docker daemon
systemctl daemon-reload 重新加载 systemd的配置文件
systemctl status docker.service 查看状态
3.连接服务器
docker -H 192.168.1.1 info
服务器IP为192.168.1.1,客户端在命令行里加上-H参数,即可与远程服务器通信
info子命令用于查看Docker服务器的信息。
4.Docker镜像
可将Docker镜像看成只读模板,通过它可以创建Docker容器。
例如某个镜像可能包含一个Ubuntu操作系统、一个Apache HTTP Server以及用户开发的Web应用。
镜像有多种生成方法:
(1)从无到有开始创建镜像;
(2)下载并使用别人创建好的现成的镜像;
(3)在现有镜像上创建新的镜像。
可以将镜像的内容和创建步骤描述在一个文本文件中,这个文件被称作dockerfile,通过执行docker build 命令可以构建出Docker镜像
5.Docker容器
Docker容器就是Docker镜像的运行实例。
用户可以通过CLI(Docker)或是API启动、停止、移动或删除容器。
可以这么认为,对于应用软件,镜像是软件生命周期的构建和打包阶段,而容器则是启动和运行阶段。
6.Registry
Registry是存放Docker镜像的仓库,Registry分私有和公有两种。
Docker Hub(https://hub.docker.com/)是默认的Registry,由Docker公司维护,上面有数以万计的镜像,用户可以自由下载和使用。
出于对速度或安全的考虑,用户也可以创建自己的私有Registry。
docker pull命令可以从Registry下载镜像。
docker run命令则是先下载镜像(如果本地没有),然后再启动容器。
7.一个完整的例子
启动容器

(1)Docker客户端执行docker run命令。
(2)Docker daemon发现本地没有httpd镜像。
(3)daemon从Docker Hub下载镜像。
(4)下载完成,镜像httpd被保存到本地。
(5)Docker daemon启动容器
docker images可以查看到httpd已经下载到本地

docker ps或者docker container ls显示容器正在运行

创建docker的更多相关文章
- 创建docker私人仓库
关于创建docker私人仓库 1.1. 安装步骤 1.1.1. 直接从公共库上面下载register镜像在本地执行 1.1.1.1. ...
- docker 创建docker用户组,应用用户加入用户组
在Linux系统下使用docker,为了避免每次输入命令都需要sudo,可以把用户加入docker用户组 创建docker用户组 sudo groupadd docker 普通用户加入docker用户 ...
- 一步步创建第一个Docker App —— 2. 创建 Docker化 主机
原文:https://docs.docker.com/engine/getstarted-voting-app/node-setup/ 部署voting app的第一步,是为集群节点(swarm no ...
- zun 不能创建 docker 容器,报错: datastore for scope "global" is not initialized
问题:zun不能创建docker容器,报错:datastore for scope "global" is not initialized 解决:修改docker 服务配置文件 ...
- linux 创建docker基础镜像
通过Dockerfile创建镜像时,一般都是基于 Docker Hub 提供的官方镜像.以下分别介绍在ubuntu16和centos7 两个系统上创建个人私有基础镜像的方法. 一.ubuntu16创 ...
- 使用Spring Boot创建docker image
目录 简介 传统做法和它的缺点 使用Buildpacks Layered Jars 自定义Layer 简介 在很久很久以前,我们是怎么创建Spring Boot的docker image呢?最最通用的 ...
- Spring Boot 创建 Docker 镜像
随着越来越多的组织转向容器和虚拟服务器,Docker正成为软件开发工作流程中一个更重要的部分.为此,Spring Boot 2.3中最新的功能之中,提供了为Spring Boot应用程序创建 Dock ...
- Docker笔记--镜像&基于GO项目创建Docker镜像
Docker笔记--镜像&基于GO项目创建Docker镜像 核心概念 Doker镜像--包含一个基本的操作系统运行环境和应用程序,镜像是创建Docker容器的基础. Docker容器--如果把 ...
- 使用自签名的方式创建Docker私有仓库
Docker推荐使用CA机构颁发的TLS(Transport Layer Security Protocol)证书来保护docker仓库的安全,但是我们也可以选择使用HTTP或者自签名证书的方式实现本 ...
- 创建docker镜像,初始化jdk8与tomcat环境
一.创建Dockerfile文件: 创建Dockerfile文件,下载jdk与tomcat放在Dockerfile同目录下. Dockerfile文件内容: FROM Ubuntu:14.10 MAI ...
随机推荐
- SAP集成技术(十三)SAP Cloud Integration
异构应用环境给IT带来了各种问题.在这种情况下,混合集成环境尤其受到影响.同时,对于建立在混合IT环境上的数字化转型项目,数据集成和跨系统访问已经开始发挥核心作用.为了满足不断增长的需求,SAP Bu ...
- Oracle细粒度审计策略
场景:经常需要查看某些表做了哪些操作. Oracle中,可以添加细粒度策略来获取,如下: begin dbms_fga.add_policy(object_schema => 'portxx', ...
- jeecgboot项目swagger2在线接口转word
1.先找到接口文档地址 2.根据url获取接口数据 3.利用在线工具进行转换生成word 在线工具地址:在线swagger转word文档 生成的word文档如下:
- vscode开发uniapp
VS Code 对 TS 类型支持友好,前端开发者主流的编辑器 HbuilderX 对 TS 类型支持暂不完善,期待官方完善 工作区禁用 Vetur 插件(Vue2 插件和 Vue3 插件冲突) 工作 ...
- Splashtop 免费60天 大赠送
这两天又是双11,又是 EDG 夺冠,可谓喜事连连.热闹不断.我们也给大家准备了一份长达两个月的免费福利,快乐加倍嗷. 福利详情: 1.分享这篇文章(不要设置分组可见). 2.发送您的 Splasht ...
- JDK源码阅读-------自学笔记(十八)(java.lang.Enum枚举类)
枚举类简介 如果有必要定义一组常量的时候使用 所有的枚举类型隐性地继承自 java.lang.Enum,枚举实质上还是类. 每一个枚举中的成员,就相当于枚举的一个对象,默认都是public stati ...
- navicat 如何调整查询区域字体大小
Navicat是一套快速.可靠和全面的数据库管理工具,专门用于简化数据库管理和降低管理成本.Navicat图形界面直观,提供简便的管理方法,设计和操作MySQL.MariaDB.SQL Server. ...
- 7.26考试总结(NOIP模拟24)[matrix·block·graph]
你那无聊的幻想,就由我来打破! 前言 补坑中.. 我都不知道自己这场模拟赛怎么打的了. 非常玄学,前三个小时一直在想正解,然后最后 20min 感觉 T1 不太稳,就又加上了一个暴力. 后来一看只有最 ...
- 解决Python使用GPU
在Python中使用GPU进行计算通常涉及到一些特定的库,如NumPy.SciPy的GPU加速版本(如CuPy.PyCUDA等)或深度学习库(如TensorFlow.PyTorch等).这些库能够利用 ...
- java 中 pop 和 peek 方法区别
相同点:都返回栈顶的值. 不同点:peek 不改变栈的值(不删除栈顶的值),pop会把栈顶的值删除. 下面通过代码展现 /* * 文 件 名: TestPeekAndPopDiff.java */ i ...