Docker概述

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

什么是容器

• 一个容器就相当于一个虚拟机

• 容器技术已经成为应用程序封装和交付的核心技术

• 容器技术的核心有以下几个内核技术组成:

– CGroups(Control Groups)-资源管理
– NameSpace-进程隔离

– SELinux安全

• 由于是在物理机上实施隔离,启动一个容器,可以像启动一个进程一样快速

什么是Docker

• Docker是完整的一套容器管理系统
• Docker提供了一组命令,让用户更加方便直接地使用容器技术,而丌需要过多关心底层内核技术

Docker优点

• 相比于传统的虚拟化技术,容器更加简洁高效
• 传统虚拟机需要给每个VM安装操作系统

• 容器使用的共享公共库和程序

• 容器运行多个系统服务占用资源小,但不能同时运行不同的系统服务,VM可以。

—Docker的缺点

• 容器的隔离性没有虚拟化强
• 共用Linux内核,安全性有先天缺陷
• SELinux难以驾驭

• 监控容器和容器排错是挑战

---------部署Docker软件

安装前准备
• 需要64位操作系统
• 至少RHEL6.5以上的版本,强烈推荐RHEL7

• 关闭防火墙(丌是必须)

安装软件包:

docker-engine-selinux-1.12.1-1.el7.centos.noarch.rpm

docker-engine-1.12.1-1.el7.centos.x86_64.rpm

[root@docker_1 docker]# yum -y install docker-engine-selinux-1.12.1-1.el7.centos.noarch.rpm docker-engine-1.12.1-1.el7.centos.x86_64.rpm

[root@docker_1 docker]# systemctl start docker.service

[root@docker_1 docker]# systemctl enable docker.service

—Docker镜像

• 在Docker中容器是基于镜像启动的
• 镜像是启动容器的核心
• 镜像采用分层设计
• 使用快照的COW技术,确保底层数据丌丢失


—镜像常用命令

docker images         //查看镜像

docker search 文件名    //搜索镜像

docker pull    文件名   //下载镜像

docker push    //上传镜像

docker load < 文件名.tar  //导入镜像文件(格式为.tar) 例:docker load <nginx.tar

docker save image_name > xx.tar   //导出镜像包,镜像名可以docker images查看,REPOSITORY下面名字

docker run -it 镜像名称:镜像标签 启动命令  //启动运行镜像 例:docker run -it night:night01 bash

//-i 表示交互 -t表示终端

例:docker run -it centos /usr/bin/python //只要可以执行的命令都可以

[root@docker_1 ~]# docker run -it centos /bin/ls

anaconda-post.log  dev home  lib64  mnt  proc run   srv  tmp var

bin   etc lib   media  opt  root sbin  sys  usr

docker tag //修改镜像名称和标签

docker inspect  镜像名称:镜像标签 // 获取容器/镜像的元数据。主要查看CMD后面的命令

"Cmd": [
                "/bin/sh",
                "-c",
                "#(nop) ",
                "CMD [\"nginx\" \"-g\" \"daemon off;\"]"

docker ps //  查看已开启的容器加 -a 查看所有容器

docker history 镜像名 //查看镜像制作历叱

docker rmi 镜像名 //删除本地镜像

docker save 镜像名 > 文件名.tar   //镜像另存为tar包

—容器常用命令

--后面加容器ID

docker run //运行容器

//-i交互式 -t终端 -d后台进程

//注意:启用一个有交互式的进程又要放后台进程用-itd , 单纯无交互放后台直接-d即可

docker ps //查看容器列表 没加-a表示正在运行的容器 加-a查看所有容器 -q查看ID号

docker stop //关闭容器

[root@docker_1 docker]# docker stop $(docker ps -q) //停用全部运行中的容器

docker start //启动容器

docker restart //重启容器

docker attach|exec //进入容器 退出挂后台要用CTRL+P+Q

docker inspect //查看容器底层信息 常用于查看服务IP和端口

docker top //查看容器进程列表 相当于在容器里执行ps查看这个容器的进程

//容器的进程在运行它的物理机上可以查看到,隔离性没有KVM那么好

docker rm //删除容器

[root@docker_1 docker]# docker rm $(docker ps -qa)  //删除所有容器

[root@docker_1 docker]# docker stop $(docker ps -q) & docker rm $(docker ps -aq)

docker exec -it  容器ID  //进入容器 建议用这个连接容器,exit退出后

[root@docker_1 docker]# docker exec -it 19c535ae17b3 bash //要加命令

[root@docker_1 ~]# docker run -d -p 80:80 nginx

//绑定物理机端口,让外网可以访问容器,

// 前面端口是物理机,后面是容器

—镜像制作

1)手动修改镜创建镜像

-docker commit 镜像ID 新镜像名称:新镜像标签

先启动一个镜像,再编缉修改好后,用commit命令制作新镜像,可以再导出镜像备用

[root@docker_1 test]# docker exec -it 2ce7c487b29d bash

[root@2ce7c487b29d bin]#  //部署好自己想要的软件服务

[root@docker_1 test]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                      NAMES
2ce7c487b29d        centos_lcf:ww       "/bin/sh -c 'sh /bin/"   About an hour ago   Up About an hour    0.0.0.0:80->80/tcp, 0.0.0.0:1120->22/tcp   happy_ride
[root@docker_1 test]# docker commit 2ce7c487b29d myos:myos

sha256:e51e0bf50e22fe712b9eea31583a83ac08749a0e55b48a000ff78a8c1129e2f8

2)docker脚本创建镜像

-docker build -t   镜像:标签 dcocker脚本路径

//注意问题:如果配置文件写错或不规范会导致创建失败,

//这时可能镜像也有了,但名字变成了<none>,解决办法还是检查docker脚本

Dockerfile
• Dockerfile语法格式
– FROM:基础镜像   //docker image 查看填写要做用的样版镜像
– MAINTAINER:镜像创建者信息   //可选项
– EXPOSE:开放的端口   //要打开哪个端口
– ENV:设置变量     //像systemctl的,可查看/usr/lib/systemd/system下*.service文件项
– ADD:复制文件到镜像  //必须存放在和Dockerfile文件同一目录下
– RUN:制作镜像时执行的命令,可以有多个 
– WORKDIR:定义容器默认工作目录  //相当于cd到哪个目录下
– CMD:容器启动时执行的命令,仅可以有一条CMD  

--示例:

//自动安装httpd ssh服务 并默认启动服务,这里启用两个服务,可用脚本运行

//记得多服务时,只留一个不在后台运行,运行后台的加上&

[root@docker_1 test]# cat Dockerfile

FROM centos_lcf:latest
RUN yum -y install openssh-server.x86_64 httpd
ENV EnvironmentFile=/etc/sysconfig/httpd
ENV EnvironmentFile=/etc/sysconfig/sshd
RUN /usr/sbin/sshd-keygen
RUN echo "1" | passwd --stdin root
WORKDIR /var/www/html
RUN echo "hello aaaaaaaaaaa" >index.html
EXPOSE 80
EXPOSE 22
WORKDIR /bin
RUN echo  "#!/bin/bash" >ngssh
RUN echo  "/usr/sbin/sshd -D & " >>ngssh
RUN echo  "/usr/sbin/httpd -DFOREGROUND" >>ngssh
RUN chmod 777 ngssh

CMD sh /bin/ngssh

--写好docker脚本后开始制作

[root@docker_1 test]# docker images 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
myos                myos                e51e0bf50e22        20 minutes ago      382 MB
centos_lcf          latest              c6fac7560757        8 hours ago         326.1 MB

[root@docker_1 test]# docker build -t myhttp:myhttp .   //这里.是指当前目录

......

Successfully built 470176bc952d
[root@docker_1 test]# docker images 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
myos                myos                e51e0bf50e22        22 minutes ago      382 MB
myhttp              myhttp              470176bc952d        About an hour ago   381.9 MB
centos_lcf          latest              c6fac7560757        8 hours ago         326.1 MB

[root@docker_1 test]# docker run -itd -p 90:80 -p 1190:22 myhttp:myhttp  //创建容器测试
6ede4e8a4dc8310a336e36c26c2f3c740e72113950c3e2427072571dd2c56336
[root@docker_1 test]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                      NAMES

6ede4e8a4dc8        myhttp:myhttp       "/bin/sh -c 'sh /bin/"   8 minutes ago       Up 8 minutes        0.0.0.0:1190->22/tcp, 0.0.0.0:90->80/tcp   infallible_carson  //显示出来基本就创建成功了,结果就是测试

//在另一台机上用ssh -p 1190 ip 连接,http://IP:90 测试

—镜像仓库制作和使用

本地局域网docker仓库

//注:重启服务后,要启动仓库镜像,其它客户机才能访问

//      默认传输使用https,可以写个配置文件不使用ssl

1) 服务端

[root@docker_1 ~]# vi /etc/docker/da.json   //建立这个配置文件

{
 "insecure-registries":["192.168.1.10:5000"]             
}

[root@docker_1 ~]# systemctl restart docker.service

//上面服务端

补充:debian 系统 dpkg apt-get  相当于redhat rpm yum

----常见错误

1) Docker创建容器时报错 WARNING: IPv4 forwarding is disabled. Networking will not work.

解决方法:是要在本机上开通路由功能

[root@docker_1 docker]# vi /usr/lib/sysctl.d/00-system.conf

net.ipv4.ip_forward=1    //添加这一行,开通路由转发功能就可以了

[root@docker_1 docker]# systemctl restart network   

Docker部署及使用方法_2018_lcf相关推荐

  1. Docker部署Gitlab,http端口不用80的解决方法

    虚拟机中的端口:80被占用了,所以需要用其他的端口代替 解决办法: web:image: 'gitlab/gitlab-ce:latest'restart: alwayshostname: '146. ...

  2. Docker部署服务时间相差8小时解决方法

    交代一下产生问题的环境:ubuntu server 16 , tomcat8, docker部署 最近用docker部署tomcat服务遇到了个小问题,生成订单获取的系统时间与当前北京时间相差了8个小 ...

  3. Docker部署文档

    Docker部署文档 目录 Docker部署文档 1 一.什么是Docker 3 1.1Docker简介 3 1.2对比传统虚拟机总结 4 1.3Docker通常用于如下场景: 5 1.4基本概念 5 ...

  4. linux docker运行目录,Linux更改Docker运行根目录的方法

    下面的就是解决Docker存放位置的空间太小,导致Docker运行缓慢的方法了,有遇到这个问题的用户,就用这种方法进行解决吧. 解决方法: 一是重装系统,这也太不人性化了,忽略...下次部署 Dock ...

  5. docker 容器环境 检测方法

    1.背景 现在有研究表明,人们目前有使用Docker进行恶意代码重现工作的倾向.Docker的反检测可分为三部分:CPU反检测,内存反检测和存储数据反检测.该技术利用了AUFS的层叠镜像技术,使得我们 ...

  6. Spring Boot 2 (四):使用 Docker 部署 Spring Boot

    Docker 技术发展为微服务落地提供了更加便利的环境,使用 Docker 部署 Spring Boot 其实非常简单,这篇文章我们就来简单学习下. 首先构建一个简单的 Spring Boot 项目, ...

  7. 基于docker部署的微服务架构(九): 分布式服务追踪 Spring Cloud Sleuth

    为什么80%的码农都做不了架构师?>>>    前言 微服务架构中完成一项功能经常会在多个服务之间远程调用(RPC),形成调用链.每个服务节点可能在不同的机器上甚至是不同的集群上,需 ...

  8. docker部署nginx并且挂载文件夹和文件

    docker部署nginx并且挂载文件夹和文件 2018年05月30日 10:18:32 丢你刘某 阅读数:2315 这段时间在研究docker,在部署nginx时遇到了坑,最主要的问题是在挂载文件和 ...

  9. Spring Boot 2.0(四):使用 Docker 部署 Spring Boot

    Docker 技术发展为微服务落地提供了更加便利的环境,使用 Docker 部署 Spring Boot 其实非常简单,这篇文章我们就来简单学习下. 首先构建一个简单的 Spring Boot 项目, ...

最新文章

  1. (互联网)Yahoo邮箱的改版
  2. linux opencv
  3. div弹窗如何设置不超出页面_js实现弹窗功能(以支付方式为例)
  4. c++日志文件中文显示乱码的问题及解决办法
  5. Pycharm中配置Pyflink
  6. 使用 dotnet watch 开发 ASP.NET Core 应用程序
  7. 宏定义 object-c 单例
  8. jdbc学习笔记3,blob类型数据的操作,preparedstatement的批量操作,数据库的事务,以及事务的特性,隔离权限的修改
  9. PyTorch | torch.manual_seed(1)是什么意思?torch随机数manual_seed(1)有什么用?如何理解torch.manual_seed(1)
  10. python爬取煎蛋图片
  11. 使用Python进行OpenCV颜色检测和过滤
  12. VVC帧内预测(一)
  13. 自学考证-——基金从业资格证书(预考期:2023.5.20),欢迎考友!
  14. 阿里云主机购买及配置Linux服务器(centos7.5)详细步骤
  15. 使用C++定义QML类型qrc:/main.qml:5:1: module “io.qt.examples.BackEnd“ is not installed
  16. 当销售离当老总还有多远(转)
  17. AutoJsPro简介
  18. 智能动环监控系统,实时排查机房安全隐患
  19. BRVAH的BaseRecyclerViewAdapterHelper与MVVM模式优雅结合,Recyclerview如何在Databinding中快捷、方便地使用(三)
  20. 重构-关于整个项目的重构

热门文章

  1. flutter ios permission_handle权限动态申请
  2. IDEA Swagger 配置
  3. java开发之图形界面GUI初步-Swing几种常用组件及其应用
  4. html5基础知识第一章语法
  5. 计算机专业父女超级对白,父女对白
  6. 看微信如何往你的朋友圈里投广告?微信广告团队李昊在微信公开课演讲实录
  7. 孙晓光:Rust 搜索引擎产品在知乎的应用
  8. AM4379 关于CCS下无法正常加载程序
  9. 2020蓝桥杯省赛C/C++B组(第二场) 试题G:回文日期
  10. Flash本地共享对象 SharedObject