容器化技术(一) docker-网易云课堂-微专业Java

一、什么是docker

Docker是Goole公司推出的基于Go语言实现的云开源项目, 基于Linux内核的cgroup、namespace,以及AUFS类的Union FS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。

由于隔离的进程独立于宿主和其他隔离的进程,因此也称其为容器

  •  与传统虚拟机对比

传统虚拟机是虚拟一套硬件,在其上运行一个完整的操作系统,并在该系统上再运行所需要的应用进程;

容器的进程直接应用于宿主机的内核,容器没有自己的内核,也没有进行硬件虚拟;因为也更为轻便。

  • docker架构

Docker使用客户端-服务器(C/S)架构模式,使用远程API来管理和创建Docker容器。

  • docker三个基本概念

  1. 镜像(image):是特殊的文件系统,提供容器运行所需的程序、库、资源、配置、等文件,以及配置参数(如匿名卷、 环境变量、用户等)。它不包含任何动态数据。镜像分成存储;
  2. 容器(container):是镜像的运行实例;
  3. 仓库(repository):类似于maven仓库,用于存储镜像;分为公开仓库和私有仓库;

二、docker安装

文档:https://docs.docker.com/install/

注意:默认情况下docker会使用Unix Socket 与Docker引擎通信,只有root和docker组的用户才可以访问Docker引擎的Unix socket 。一般Linux系统上不会直接使用root用户进行操作,因此需要将使用docker的用户,加入docker用户组。

sudo groupadd docker           #c创建docker组

sudo usermod -aG docker $USER  #将用户加入docker组

安装完成后,执行docker run hello-world ; 出现如下信息,说明docker已经安装成功;

            
三、docker命令

 

管理命令:
  container   管理容器
  image       管理镜像
  network     管理网络
  node        管理Swarm节点
  plugin      管理插件
  secret      管理Docker secrets
  service     管理服务
  stack       管理Docker stacks
  swarm       管理Swarm集群
  system      查看系统信息
  volume      管理卷
  
  如:docker container ls 显示所有容器
普通命令:
    
  attach     进入一个运行的容器
  build      从一个DockerFile构建镜像
  commit     从容器创建一个镜像
  cp          从容器和主机文件系统之间拷贝文件 
  create      创建一个容器
  diff        检查容器文件系统上的更改
  events      从服务器获取实时事件
  exec        在正在运行的容器中运行命令
  export      将容器的文件系统导出为tar存档
  history     显示镜像的历史记录
  images      查看镜像列表
  import      从归档文件中创建镜像
  info        显示系统范围的信息
  inspect     返回Docker对象的低级信息
  kill        kill运行中的容器
  load        从存档或者STDIN加载镜像
  login       登陆docker镜像仓库
  logout      退出docker镜像仓库
  logs        获取一个容器的日志
  pause       暂停一个或多个容器中的所有进程
  port        查看端口映射或容器的特定映射列表
  ps          查看容器列表
  pull        从镜像仓库拉取镜像
  push        将本地的镜像上传到镜像仓库,要先登陆到镜像仓库
  rename      重命名容器
  restart     重启容器
  rm          删除容器
  rmi         删除镜像
  run         创建一个新的容器并运行一个命令
  save        将指定镜像保存成 tar 归档文件
  search      从Docker Hub搜索镜像
  start       启动容器
  stats       实时显示容器资源使用情况的统计信息
  stop       停止容器
  tag         标记本地镜像,将其归入某一仓库
  top         展示一个容器中运行的进程
  unpause     恢复容器中所有的进程
  update      更新容器配置
  version    显示Docker的版本信息
  wait        阻塞直到容器停止,然后打印退出代码
  
  如:docker images 显示所有镜像

docker 拉取并运行一个镜像

1、下载镜像

docker pull ubuntu:16.04

2、查看已经下载的镜像

$ docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    centos              latest              49f7960eb7e4        6 weeks ago         200MB
    hello-world         latest              f2a91732366c        8 months ago        1.85kB

3、运行一个镜像并生成容器

//运行一个centos镜像,并执行/bin/bash命令
$ docker run -it centos /bin/bash

 

docker run命令 通过增加-i -t参数可以与容器以终端的方式交互

docker 进入一个运行的容器

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
36afde543eb5        mysql:5.7           "docker-entrypoint.s…"   About an hour ago   Up About an hour    0.0.0.0:3306->3306/tcp   mymysql

$ docker exec -it 36afde543eb5 /bin/bash

-i 保持STDIN打开 -t 分配一个虚拟TTY窗口

docker 提交一个镜像到镜像仓库

1、首先到https://hub.docker.com/注册一个账号,保存下用户名密码 2.控制台登陆dockerhub账户

$ docker login
    输入刚注册的用户名密码

2、查看镜像

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
redis               latest              f06a5773f01e        2 days ago          83.4MB

3、选择需要上传的镜像,重命名为指定的格式

$ docker  tag redis username/myredis:v1
username:为自己注册的用户名

myredis:为自己为镜像取的名字

v1:为任意设置的版本号

4、完成上述操作后,即可提交镜像到自己的仓库

docker push username/myredis:v1

docker 映射文件从宿主机到容器,端口号映射

//将宿主机的81端口映射到容器的80端口
//将宿主机的/develop/data卷,映射到容器的/data卷

$ docker run -i -t -p 81:80 -v /develop/data:/data  centos /bin/bash

-p:映射端口号 -v:磁盘目录映射

docker 更改端口号映射

运行中的容器无法映射新的端口号,也无法更改端口号映射,但可以通过两种方法解决

1、iptable转发端口

//查看容器ip
$ docker inspect 36afde543eb5 | grep IPAddress
"IPAddress": "172.17.0.2"

//将主机的8081端口映射到宿主机的8080端口
$ iptables -t nat -A  DOCKER -p tcp --dport 8081 -j DNAT --to-destination 172.17.0.2:8080

2、先提交容器为镜像,再运行这个容器,同时指定新的端口映射

//提交容器为镜像
$ docker commit 9995ffa15f46  mycentos:0.1
//停止旧的容器
$ docker stop 9995ffa15f46
//重新从旧的镜像启动容器
$ docker run -i -t  -p 8081:8080  mycentos:0.1

从DockerFile创建镜像

$ docker build -t myimage:v1 .

-t :指定镜像名称和标签,格式为'name:tag' .: 最后一个点代表当前目录,也可以换成其它的路径

四、数据挂载

容器中管理数据主要有两种方式:数据卷、挂载主机目录;

docker volume create my-volume    :创建一个数据卷

docker volumes                                 :查看所有数据卷

docker volume inspect my-volume     : 查看指定的数据卷

docker volume rm my-volume              :删除数据卷

docker volume prune                            :清理数据卷

启动一个挂载数据卷的容器:

挂载一个本地主机目录到容器:

 挂载一个主机文件到容器:

 

五、Compose集成式应用组合

1、是什么

Compose是docker官方的开源项目,负责实现对Docker容器集群的快速编排。它允许用户通过一个单独的docker-compose.yml模板文件来定义一组相关联的容器为一个项目。

2、两个重要概念

服务:一个应用的容器,可以包括若干运行相同镜像的容器实例;

项目:有一组想关联的应用容器,组成一个完整的业务单元;

3、docker Compose命令

 

总结:

本文是初学docker的学习记录,后续会更新关于容器化技术的其他内容。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值