docker基础——关于安装、常用指令以及镜像制作初体验
为什么使用docker
docker就是一个轻量级
的虚拟机,他解决的是服务迁移部署的时候环境配置问题。比如常见的web服务依赖于jdk、Tomcat、数据库等工具,迁移项目就需要在新的机器重新配置这些,不光麻烦,而且可能配错。
如果能够将整个服务连同他依赖的外部环境一同打包就好了,docker就是这么干的。他将配置好的软件打包成image
,在新的机器里面启动这个image
即可
当然我所理解的只是一小部分,docker还有提供弹性云服务、组建微服务架构等方面的应用
最后,相对于传统虚拟机,docker占用的资源很少,docker本身只消耗系统的一个进程的开销。而虚拟机,比如VMware,是模拟出一个完整的操作系统。
安装docker-ce
docker分为社区版和企业版,其中docker-ce
就表示社区版本,下面演示使用repository
(库)安装docker-ce
的指令。另外,笔者默认使用的是root账户,如果不是root账户请在每个指令前添加sudo
指令
注:笔者的系统版本为Ubuntu 16.04LST
安装指令
# 升级apt包
apt-get updat
#安装必要的工具,使apt可以基于htpps协议使用repository
apt-get install apt-transport-https ca-certificates curl \
software-properties-common
#安装docker官方GPG key 并验证
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
#如果成功,会显示pub uid sub等字段信息
apt-key fingerprint 0EBFCD88
#将docker安装源加入ppa
add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable";
#刷新apt源
apt-get update
#安装docker-ce,如果前面准备工作都做好了就可以执行安装了
apt-get install docker-ce
#测试是否安装成功
docker run hello-world
启动与关闭
service docker start
service docker stop
修改镜像源
官方镜像库地址在国外,我们docker pull
的时候会很慢,甚至报timeout拉不下来,对于大陆的用户官方推荐修改镜像源地址。
方法一
在启动守护进程时传入--registry-mirror
:
docker --registry-mirror=https://registry.docker-cn.com daemon
方法二
修改配置文件,修改/etc/docker/daemon.json
(没有的自己创建),添加下面键值对:
"registry-mirrors": ["https://registry.docker-cn.com"]
最后,改完重启:
service docker restart
国内常用的镜像地址
docker官方中国区:https://registry.docker-cn.com
网易:http://hub-mirror.c.163.com
ustc:https://docker.mirrors.ustc.edu.cn
image 和 container
image
和container
是docker两个重要的元素。
Image
image——镜像,即docker打包配置好的环境整合后,形成的二进制文件。比如,在别人的Ubuntu镜像基础上,我们有加入了自己的Tomcat服务器和jdk,然后在打包,这就是自定义的image
官方在docker hub上定义一个library
库,里面都是官方提供的镜像,我们可以通过docker命令直接pull下来
# 拉取redis镜像
docker image pull redis
后面,我们会给出一些关于image
和container
常见指令的cheat sheet。这里以介绍概念为主
container
container——容器,他就是image的实例。类比于java,image就像一个Class<T>
对象,而container就像通过Class
生成的实例对象T
。一个image模板可以生成无数个container实例,这些container之间环境一样又互相独立
# 以redis镜像为模板,创建一个容器叫test-redis
docker container run --name test-redis -d redis
常用的cheat sheet
# 搜索redis镜像
docker seacher redis
#下载镜像,library是官方库,不写的话默认pull官方库
docker pull library/redis
#列出所有的镜像
docker images
#删除redis镜像,这个redis就是镜像名称
docker image rm redis
#删除所有的镜像
docker image rm $(docker image ls -a -q)
#启用redis image作为一个容器,名称为test-redis
docker run --name test-redis -d redis
#查看运行中的容器
docker ps
#或者
docker container ls
# 查看所有的容器(运行的和停止的)
docker ps -a
#关闭容器,test-redis是容器名,填写容器id也可以
docker stop test-redis
#或者
docker container kill e494
#启动容器id为e494的容器,其实就是前面的redis
docker start e494
#删除容器
docker container rm e494
#删除所有停止的容器
docker rm $(docker ps -a -q)
#启用镜像时将内部端口映射到Linux 系统的端口上,这里将容器的6379端口映射到本机的6478端口上
docker run -d -p 6478:6379 --name test-redis redis
#注1:如果是在虚拟机上的容器,其实虚拟机还要再映射一次端口到真实主机的端口上
#注2:如果是局域网,很不幸的,还需要将私有ip映射到公网ip上。。。
#注3:如果没有公网ip,很不幸的,可能需要借助花生壳之类的工具提供公网ip,进行内网穿透orz
# 查看e494容器的运行日志
docker log e494
#进入e494这个容器的内部bash界面操作
docker exec -it e494 bash
基于docker部署应用
部署应用,即将我们的App制作成镜像——Image,可以到处运行。制作image就需要编写Dockerfile
,这是一个文本文件,docker根据这个文件生成image
Dockerfile主要指令
# 继承一个官方的基础镜像,这里是Python,tag = 2.7-slim
FROM python:2.7-slim
# 设置镜像工作目录
WORKDIR /app
# 拷贝当前目录文件到 镜像/app目录下
ADD . /app
# RUN表示运行一个Linux指令
RUN pip install --trusted-host pypi.python.org -r requirements.txt
# 设置容器对外端口
EXPOSE 80
# 设置环境变量
ENV NAME World
#让容器像一个可执行程序一样运行
ENTRYPOINT ["/bin/echo"]
#启动镜像时执行的指令,这是在image完成后的动作,一个dockerfile只能有一个cmd
CMD ["python", "app.py"]
使用docker部署一个spring boot项目
- 制作Dockerfile
#dockerfile
#下载基础镜像java:8
FROM java:8
#将dockerdemo.jar(我们的springboot打包文件)复制到镜像目录,并改名为app.jar
ADD dockerdemo.jar app.jar
#镜像包对外端口为8080
EXPOSE 8080
#启用容器时运行指令 java -jar /app.jar
ENTRYPINT ["java","-jar","/app.jar"]
- 编译镜像
将Dockerfile和jar包一起放在/var/app
文件夹下,运行指令
#luzj/docker 为镜像名,后面的.表示Dockerfile的目录在当前目录
docker build -t luzj/docker .
- 查看镜像库
docker images
- 运行镜像
docker run -d --name mydocker -p 8080:8080 luzj/docker
- 访问
http://192.168.11.128:8080/index
参考
docker基础——关于安装、常用指令以及镜像制作初体验的更多相关文章
- Docker源码安装附内网镜像安装演示
Docker源码安装附内网镜像安装演示 系统版本要求 当前系统版本:CentOS Linux release 7.9.2009 (Core) 内核版本:3.10.0-1160.el7.x86_64 注 ...
- Docker Alpine Dockerfile 安装nginx,最小镜像
Docker Alpine Dockerfile 安装nginx,最小镜像 FROM alpine MAINTAINER will ## 将alpine-linux:apk的安装源改为国内镜像 RUN ...
- 第三次随笔--安装虚拟机及学习linux系统初体验
第三次随笔--安装虚拟机及学习linux系统初体验 ·学习基于VirtualBox虚拟机安装Ubuntu图文教程在自己笔记本上安装Linux操作系统 首先按照老师的提示步骤进行VirtualBox虚拟 ...
- 【Docker】docker 入门以及一些常用指令
概述 Docker是一款针对程序开发人员和系统管理员来开发.部署.运行应用的一款虚拟化平台.Docker 可以让你像使用集装箱一样快速的组合成应用,并且可以像运输标准集装箱一样,尽可能的屏蔽代码层面的 ...
- Docker Kubernetes YAML文件常用指令
YAML文件常用指令 配置文件说明: 定义配置时,指定最新稳定版API(当前为v1). 配置文件应该存储在集群之外的版本控制仓库中.如果需要,可以快速回滚配置.重新创建和恢复. 应该使用YAML格式编 ...
- docker系列(一):docker基础与安装笔记
1 什么是docker docker是基于GO语言编写的开源容器项目,诞生于2013年初,到目前为止,已经经历了6年的发展演变.现如今,docker已经非常火爆,特别是在一线IT企业,部署.运维等工作 ...
- Docker基础教程(常用命令篇)
1.查看docker信息 # 查看docker版本 $docker version # 显示docker系统的信息 $docker info 2.启动容器 # 交互式 $docker run -it ...
- Docker学习笔记_Dockerfile常用指令
Dockerfile常用指令
- Python基础学习参考(一):python初体验
一.前期准备 对于python的学习,首先的有一个硬件电脑,软件python的运行环境.说了一句废话,对于很多初学者而言,安装运行环境配置环境变量的什么的各种头疼,常常在第一步就被卡死了,对于pyth ...
随机推荐
- vsftpd配置文件详解 ---配置解说
vsftpd配置文件详解 1.默认配置: 1>允许匿名用户和本地用户登陆. anonymous_enable=YES local_enable=YES 2>匿名 ...
- wampserver启动时图标不变绿的解决方法
有2种可能: 1.你安装wamp的时候安装路径中有中文,把路径全部改为英文. 2.其他软件占用了80端口号,解决方法是在服务中找微软的sql server或者其他服务,关掉服务后重启就行了.
- 【Iperf】iperf测试wlan的性能
1.概念: iperf命令是一个网络性能测试工具.iperf可以测试TCP和UDP带宽质量. iperf可以测量最大TCP带宽,具有多种参数和UDP特性.iperf可以报告带宽,延迟抖动和数据包丢失. ...
- intellijidea课程 intellijidea神器使用技巧 3-1 列操作
Ctrl shift 右箭头 ==> 选中右边单词 ctrl shift alt L ==> 选中所有相同的字符 Ctrl alt L ==> 格式化
- JavaScript流程控制语句脑图
JavaScript流程控制语句脑图 图片是从网上找来的,在这记录一下,以备后面需要的时候查找方便. JavaScript通过规定的语句让有条件的按照一定的方式执行. 分为:循环语句 while do ...
- 在页面rem布局中用到的js代码
在你的页面加入以下代码,就初步搞定了 function fontSize() { var view_width = document.getElementsByTagName('html')[0].g ...
- javascript中如何实现继承
javascript中如何实现继承 // 原型方式的'继承' function Person(name) { //定义一个Person的构造函数 this.name = name; //添加属性 } ...
- 如何查询mysql中date类型的时间范围记录?
java date类型 会不会自动转换 mysql date类型? 抹除掉后面 时间 ? 时间不是查询条件?
- vos语音业务规范操作承诺函
语音业务规范操作承诺函 *****网络科技有限公司: 我司开通固话2000线,话务价格为0.045元/分钟(仅拨打中国移动网内电话).为防止投诉.网外电话.欠费等语音话务风险,我司承诺如下:在业务上遵 ...
- 【转】run方法与start方法的区别
在java线程中 start与run的不同start与run方法的主要区别在于当程序调用start方法一个新线程将会被创建,并且在run方法中的代码将会在新线程上运行,然而在你直接调用run方法的时候 ...