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

imagecontainer是docker两个重要的元素。

Image

image——镜像,即docker打包配置好的环境整合后,形成的二进制文件。比如,在别人的Ubuntu镜像基础上,我们有加入了自己的Tomcat服务器和jdk,然后在打包,这就是自定义的image

官方在docker hub上定义一个library库,里面都是官方提供的镜像,我们可以通过docker命令直接pull下来

# 拉取redis镜像
docker image pull redis

后面,我们会给出一些关于imagecontainer常见指令的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 中国官方镜像加速

Spring Boot实战

Docker 入门教程

原文地址:https://www.cnblogs.com/Franken-Fran/p/docker_Ftaste.html

时间: 2024-08-01 02:53:29

docker基础——关于安装、常用指令以及镜像制作初体验的相关文章

docker基础平台安装1

Docker基础平台安装 1. 前言 1.1.  文档目标 假定您对docker及相关生态有一定的了解,参照此文档,可以完成以下工作 2  完成docker基础组件的安装 2  完成docker网络组件的安装配置 2  完成docker平台管理组件的安装 1.2.  平台目标 2  Docker应用部署平台 2  各主机资源统一调度 2  应用实例快速伸缩 2  方便的服务发现机制 2  内部DNS访问容器 2  跨主机容器网络 2  容器内应用健康检查 1.3.  环境要求 操作系统:cent

第三次随笔--安装虚拟机及学习linux系统初体验

第三次随笔--安装虚拟机及学习linux系统初体验 ·学习基于VirtualBox虚拟机安装Ubuntu图文教程在自己笔记本上安装Linux操作系统 首先按照老师的提示步骤进行VirtualBox虚拟机的安装,安装过程可谓一帆风顺,一马平川,并没有遇到什么问题. ·成功安装之后打开虚拟机 对就是这个样子,略微有一点激动,还好,在自己的电脑上运行并不会有太多的卡顿 ·参考老师的学习方法通过实践学习Linux 基础入门(新版)课程,掌握常用的Linux命令,重点是3/4/5/6/7/8节. 虚拟机安

Memcached安装 常用指令

Memcached 源码安装 # 安装依赖yum install -y gcc gcc-c++ automake autoconf make cmake libevent-devel.x86_64# 源码安装memcache# 下载源码wget http://www.memcached.org/files/memcached-1.5.17.tar.gz# 解压tar zxf memcached-1.5.17.tar.gzcd memcached-1.5.17./configure --prefi

redis基础一_常用指令

---恢复内容开始--- 启动 redis 客户端: 切换数据库,redis默认有16个数据库: DBSIZE: KEYS:查找所有符合给定模式pattern(正则表达式)的 key . KEY: STRING: ---恢复内容结束--- 原文地址:https://www.cnblogs.com/ustc-anmin/p/11071047.html

Angular JS从入门基础 mvc三层架构 常用指令

Angular JS从入门基础  mvc模型 常用指令 ★ 最近一直在复习AngularJS,它是一款优秀的前端JS框架,已经被用于Google的多款产品当中.AngularJS有着诸多特性,最为核心的是:MVC.模块化.自动化双向数据绑定.语义化标签.依赖注入等等. 1.常用指令 AngularJS 通过指令扩展了HTML,且通过表达式绑定数据到 HTML.下面我们看一下AngularJS中的常用指令. (1).基本概念 指令:AngularJS中,通过扩展HTML的属性提供功能.所以,ng-

【补充】docker基础学习

docker 基础知识 之前写了一篇docker未授权访问的文章,现在来补充一下docker基础知识,以便更好的学习docker上的漏洞. docker是一款轻量级的虚拟化的产品,它属于层级化的架构.最底层是LXC和文件系统AUFS,上面是各种镜像,docker实际上是具有依赖关系的多个层组成的,不同的container可能共享底层的资源.docker的核心是基于cgroup和namespace隔离和限制资源. Cgroups是control groups的缩写,是Linux内核提供的一种可以限

Docker入门(二):容器与镜像常用指令

零.docker常用命令 #镜像名 版本标签 镜像id 创建时间 镜像大小 REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest fce289e99eb9 6 months ago 1.84kB docker version/info #查看版本/信息 docker --help #查看说明文档 docker logs -f -t --tail 日志条数 容器ID #查看容器日志 docker inspect #获取容器/镜像的元数据 一

Docker 基础概念科普 和 常用操作介绍

Docker 基础概念 Docker是什么? Docker的思想来自于集装箱,集装箱解决了:在一艘大船上,可以把货物规整的摆放起来.并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响.那么我就不需要专门运送瓷器的船和专门运送化学物品的船了.只要这些货物在集装箱里封装的好好的,那我就可以用一艘大船把他们都运走. 不同的应用程序可能会有不同的应用环境,比如.net开发的网站和php开发的网站依赖的软件就不一样,如果把他们依赖的软件都安装在一个服务器上就要调试很久,而且很麻烦,还会造成

Docker的使用初探(一):常用指令说明

目录 Docker的使用初探(一):常用指令说明 为什么要用Docker Docker的安装与简单使用 国内镜像加速 常用指令 Docker的使用初探(一):常用指令说明 前几个星期实践的了,再不记录一下真的就忘干净了 Docker即容器技术,具体的介绍已经有很多,不打算赘述了,说一些优点 为什么要用Docker 对我个人来说,最大的优点就是在一台电脑上可以部署不同的环境而不用担心它们产生冲突,最常见的冲突就是端口占用,使用Docker技术可以很方便地规避这一问题,而且便于管理,我不用在本地处理