初始docker
什么是docker?
很多人都是使用docker但是对docker的理解其实并没有这么透彻,只知道怎么用但是不知道为什么用 什么时候去用。
一、环境配置的难题
软件开发最大的麻烦事之一,就是环境配置。用户计算机的环境都不相同,你怎么知道自家的软件,能在那些机器跑起来?
用户必须保证两件事:操作系统的设置,各种库和组件的安装。只有它们都正确,软件才能运行。举例来说,安装一个 Python 应用,计算机必须有 Python 引擎,还必须有各种依赖,可能还要配置环境变量
环境配置如此麻烦,换一台机器,就要重来一次,旷日费时。很多人想到,能不能从根本上解决问题,软件可以带环境安装?也就是说,安装的时候,把原始环境一模一样地复制过来。
Linux 容器
由于虚拟机存在这些缺点,Linux 发展出了另一种虚拟化技术:Linux 容器(Linux Containers,缩写为 LXC)。
Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离。或者说,在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。
由于容器是进程级别的,相比虚拟机有很多优势。
Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。
Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。
总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。
1、先卸载你的旧版本的docker(可以不卸载别较真 哈哈)
CentOS安装docker
官方教程如下,最正确安装docker姿势
1.卸载旧版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine 2.设置存储库
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2 sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo 3.安装docker社区版
sudo yum install docker-ce
4.启动关闭docker
systemctl start docker
2、下载docker加速器
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
下载完成之后就重启docker然后就可以了
然后看看你的配置是否生效了
cat /etc/docker/daemon.json
也可以手动进行和配置加速器:
cat /etc/docker/daemon.json #修改这个文件为如下内容 {
"registry-mirrors": [
"http://95822026.m.daocloud.io"
],
"insecure-registries": []
}
---------------------------------------------------------
或者用这条命令
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://95822026.m.daocloud.io #事后重启docker
systemctl restart docker
然后查看docker版本 和状态信息
docker version
在启动docker的时候有时候会报错:WARNING: IPv4 forwarding is disabled. Networking will not work.
是因为docker被禁用了 我们要去系统配置中打开设置
我们需要在/usr/lib/sysctl.d/00-system.conf中添加
systemctl restart network && systemctl restart docker
查看docker所有的镜像
docker images
也可以
docker image ls
如果查看docker 镜像的时候发现下面的错误就是你的docker安装了但是 是没有启动的
需要先启动docker
启动docker: systemctl start docker su root # 先切换到root用户, 再执行以下命令 systemctl enable docker # 开机自动启动docker systemctl start docker # 启动docker
systemctl restart docker # 重启dokcer
我们想下载的镜像可以直接通过pull来下载 但是下载之前也可以通过search来看看要下载的信息
docker search + 要查看的镜像 docker search hello-world # 查看hello-world镜像
就可以看到不同的版本的镜像的点赞数目
我们最好以点赞数目最多的使用
分层技术一层一层下载
小技巧:
你可以直接run一个镜像的前3位id 就可以跑它
查看运行的docker 容器
docker ps 查看正在运行的docker 容器 docker ps -a 查看所有的运行过的容器 docker ps -aq 查看所有的容器id
删除docker镜像
docker rmi +要删除的镜像名(镜像id) docker rm +要删除的容器id 镜像是你下载下来的 容器是你启动的镜像生成的
批量删除:
docker ps -aq 是查看你的所有的正在运行的容器id
然后用反引用号 把这查到的id都加进去 docker rm `docker ps -aq`
批量删除已经推出的容器:
docker container prune
当你删除镜像的时候可能会发生:
Error response from daemon: conflict: unable to delete 1e1148e4cc2c (cannot be forced) - image has dependent child images
这个是由于你的镜像有正在运行的生成的容器造成的,我们要先删除其生产的容器然后再进行镜像的删除
当报错无法删除的时候就进行值的
然后 docker ps -a 查出所有的容器id
然后docker rm 删除对应的容器 就可以 了
如果容器很多那就要一个一个删除或者删除所有的推出额镜像:docker container prune
然后再查看你的容器就没有了
运行一个ubuntu容器
咱们要在cenots7操作系统下,以docker下载一个ubuntu image文件,然后以image启动容器
docker pull ubuntu 或者指定版本:docker pull ubuntu:14.04
运行这个乌班图容器!
docker run ubuntu 也可以指定参数启动
docker run - rm ubuntu
dicker 启动的参数
docker run就是运行容器的命令。
参数
-it : -i 是交互式操作,-t是终端
--rm : 容器退出后将其删除。也可以不指定参数,手动docker rm,使用-rm可以避免浪费空间。
ubuntu:14.04 这指的是镜像文件
bash : 指定用交互式的shell,因此需要bash命令 eg:
docker run --rm ubuntu # 启动后删除 不留痕迹 docker ps -a 也看不到
docker run -it --rm ubuntu # 启动是的交互命令结束不留痕迹
用 --rm 参数启动的和无参数的是不一样的
执行了docker run -it --rm unbuntu 之后交互界面的信息都不一样了
在这个里面查看系统都显示是ubuntu的了 cat /etc/os-release
docker 运行centos
下载centos后 然后用-it进行centos容器内的交互界面
-d后台运行
docker run -d centos /bin/bash -c '你要执行的shell脚本' docker run -d centos /bin/bash -c 'while true;do echo hello docker66666;sleep 1;done'
然后就会返回给我们一段执行后的启动后的id
然后我们想要查看这个进程运行的信息
docker exec -it 要查看的进程id /bin/bash docker exec -it 78b /bin/bash
查看容器内的输出
然后我们退出centos内的进程 到外面查看docker 的日志 因为刚才是在centos容器内 我们的docker 是安装在服务器内的 所以要到服务器的大环境内 而不是某一个docker容器内
docker logs +要查看的进程id 也可以在后面 加上-f 参数 可以一直查看 和tail -f 一样
查看docker 的进程
docker ps
停止docker 进程
如果我们有docker进程这个时候不想让他跑了就用stop
docker stop +要停止的docker进程
重现再跑起来 要么执行最开始跑的命令 要么就执行start
docker start +要启动的进程
先查看以前跑过的进程再start
docker 自定义镜像 commit(构建自定义的镜像)
我们在启动 的docker进程有个id 我们可以根据这个id来打包
docker commit + 要打包的进程id +新起的包名
外部访问容器
容器中可以运行网络应用,但是要让外部也可以访问这些应用,可以通过-p或-P参数指定端口映射
docker run -d -P trainning/webapp python app.py 参数解析:
-d 后台运行容器
-P 随机端口映射
-p 宿主机端口容器端口(就是可以指定端口小写的p指定端口容器)
也可以通过-p参数指定映射端口
#指定服务器的9000端口,映射到容器内的5000端口
[root@oldboy_python ~ 16:46:13]# docker run -d -p 9000:5000 training/webapp python app.py
c0b5a6278d0f4f2e9b9eba8680451111d8b911b61de0c37ea64cb337aefb854e
docker运行一个flask web应用,暴露端口供给windows使用
1、首先我们要先下载系统镜像 centos, 然后启动这个镜像生成容器
2、然后进入这个镜像内安装python2的软件管理工具 easy_install
3、安装flask
4、编写好flask脚本
5、退出容器产生容器id记录
6.提交此容器记录,构建镜像
7.查看镜像
8.运行flask_web镜像,暴露端口访问
9.此时在windows浏览器访问 7000端口的 flask应用
1.docker run -it centos
2. 安装 easy_install 命令,python2软件包管理
yum install python-setuptools
3.安装flask
easy_install flask
4.编写好flask web脚本
cd /home # 脚本写在home下
然后yum install vim -y 安装vim 编辑器
touch flask_web.py # 建立一个脚本文件编辑脚本
from flask import Flask app = Flask(__name__)
@app.route('/')
def index():
return 'Hello This is docker'
#此脚本当做模块导入时候,__main__里代码不执行
#当做脚本文件直接运行的时候,执行__main__代码
if __name__ == '__main__':
app.run(host='0.0.0.0',port=9000) 5.退出容器,产生容器id记录
exit
6.提交此容器记录,构建镜像(找到你的容器内的id你进入的时候会有显示的)
docker commit 976 s12/flask_web
7.查看镜像
docker images
8.运行flask_web镜像,暴露端口访问 启动的时候要指定python解释器
docker run -d -p 7000:9000 s12/flask-web python /home/flask-web.py
9.此时在windows浏览器访问 7000端口的 flask应用
然互docker ps查看是否启动了
接着访问指定的7000端口就能看到内容了
docker hub
docker hub 顾名思义就是一个类似于我们常用的github存储代码一样这个是存储我们的 生成的容器的
首先我们打包的镜像 直接推送是不可以的 需要先起个tag名字才能进行推送的
打包:
docker tag 镜像名字 你的dockerhub名字/起的tag名字
docker tag caicai/flask-web zyltry/caicai # 给我的caicai/flask-web镜像在zyltry的dockerhub下起个caicai的tag
然后直接docker images 然后把你起的tag生成的镜像名字推上去
直接docker push + 镜像名字
然后 就可以在你的 docker hub上看到你提交的信息了
发布docker image到仓库
第一种,docker hub公有镜像发布
1.docker提供了一个类似于github的仓库dockerhub,
网址https://hub.docker.com/需要注册使用
2.注册docker id后,在linux中登录dockerhub
docker login 注意要保证image的tag是账户名,如果镜像名字不对,需要改一下tag
docker tag chaoyu/centos-vim zyltry163/centos-vim
语法是: docker tag 镜像名 docker hub名字/仓库名 3.推送docker image到dockerhub
docker push 镜像名字:latest
4.在dockerhub中检查镜像
https://hub.docker.com/
5.删除本地镜像,测试下载pull 镜像文件
docker pull 镜像名
私有仓库
初始docker的更多相关文章
- 第1章 初始Docker容器
1.1 什么是Docker slogan:Build Ship Run Any App Anywher.关键在于Ship,通过把程序和程序运行所需要的环境一起交付. Linux容器技术: Docker ...
- 【Docker学习之一】初始Docker
一.云计算的概念 PaaS(Platform-as-a-Service:平台即服务),把应用服务的运行和开发环境作为一种服务.SaaS(Software-as-a-Service),意思为软件即服务, ...
- Docker++:从 0 到 1 学习Docker(笔记)
本篇文章有点长 ... 知识点如下:下 ↓ ↓ ↓ ~ 初识 Docker ~ Docker 命令 ~ Docker 容器的数据卷 ~ Docker 应用部署 ~ Dockerfile ~ Dock ...
- Docker容器化技术
1. 初始Docker 1.1 Docker概念 Docker概念:Docker是一个开源的应用容器引擎 诞生于2013年初,基于Go实现,dotCloud公司出品(后改名为Docker Inc) D ...
- Hyperledger Fabric组织的动态添加和删除
前言 在Fabric定制联盟链网络工程实践中,我们虚拟了一个工作室的联盟链网络需求,并根据此需求分析了整个网络的架构且已经完成了一个简单 fabric 网络模型.本文将在其基础上,在 mychanne ...
- Hyperledger Fabric节点的动态添加和删除
前言 在Hyperledger Fabric组织的动态添加和删除中,我们已经完成了在运行着的网络中动态添加和删除组织.本文将在其基础上,详细介绍了如何在 soft 组织上添加新的 peer2 节点,并 ...
- Hyperledger Fabric无系统通道启动及通道的创建和删除
前言 在Hyperledger Fabric组织的动态添加和删除中,我们已经完成了在运行着的网络中动态添加和删除组织,但目前为止,我们启动 orderer 节点的方式都是通过系统通道的方式,这样自带系 ...
- Hyperledger Fabric无排序组织以Raft共识算法启动多个Orderer服务、多组织共同运行维护Orderer服务
前言 在Hyperledger Fabric无系统通道启动及通道的创建和删除中,我们已经完成了以无系统通道的方式启动 Hyperledger Fabric 网络,并将链码安装到指定通道.但目前为止,实 ...
- Hyperledger Fabric无排序组织以Raft协议启动多个Orderer服务、TLS组织运行维护Orderer服务
前言 在实验Hyperledger Fabric无排序组织以Raft协议启动多个Orderer服务.多组织共同运行维护Orderer服务中,我们已经完成了让普通组织运行维护 Orderer 服务,但是 ...
随机推荐
- docker “no space left on device”问题定位解决
在paas环境上使用docker加载镜像的时候出现了如下问题 第一反应应该是存储镜像的路径磁盘满了 docker info查看docker的根路径,可以看到为/opt/docker: 查看/opt/d ...
- redis 迁移工具 redis-port 从阿里云迁移到aws
对于 redis 的 迁移我在网上看到了很多方法,有使用redis-dump 的,有使用 aof导入方式,有rdb文件迁移方式,和redis-port. 由于我是将 redis 从阿里云迁移到AW ...
- springboot-11-servlet, listener, fitlter的添加
springboot中添加servlet, filter, listener有2种方式: 代码注册servlet 和自动注解注册(在使用druid监控有使用过) 代码注册通过ServletRegist ...
- Memcached理解笔记1---安装&常规错误&监控
一.下载 1.Libevent 简单的说就是一个事件触发的网络库,Memcached离不开它. wget http://cloud.github.com/downloads/libevent/libe ...
- Hive导入数据的四种方法
Hive的几种常见的数据导入方式这里介绍四种:(1).从本地文件系统中导入数据到Hive表:(2).从HDFS上导入数据到Hive表:(3).从别的表中查询出相应的数据并导入到Hive表中:(4).在 ...
- SQLAlchemy使用说明之ORM
对象关系映射(Object Relation Map, ORM)可以将一个类映射为关系模式(数据表). 使用ORM比直接书写SQL在安全性,可读性上都有很大优势. Working with Relat ...
- 【转】手机web前端调试页面的几种方式
前言 PC端web页面调试比较容易,这里主要说几种移动端调试的方法,从简单到复杂.从模拟调试到远程调试,大概分为几部分: 1.Chrome DevTools(谷歌浏览器)的模拟手机调试 2.weinr ...
- Spring学习手札(一)
Spring能做什么 1. 能根据配置文件创建及组装对象之间的依赖关系: 2. 面向切面编程,能帮助我们无耦合的实现日志记录,性能统计,安全控制等: 3. 提供第三方数据访问框架(如Hibernate ...
- IDEA使用总结1-Github下载代码和上传代码到Git
1. 首先你需要在IDEA中创建一个项目,创建完项目后使能版本管理插件 选择git后创建本地git仓库成功,提示如下 2.第二步 commit代码到 commit时会提示是否需要进行检查什么的 3.第 ...
- Python3 笔记01:求两数之和
这是来自于leetcode的题目: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的 两个 整数. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数 ...