不学网

 找回密码
 立即注册

只需一步,快速开始

手机号码,快捷登录

查看: 81|回复: 0

[linux] Docker部署及使用方法_2018_lcf

[复制链接]
Ricardo 发表于 2018-6-30 17:22:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Docker概述
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

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

• 容器技术已经成为应用程序封装和交付的核心技术
• 容器技术的核心有以下几个内核技术组成:
– CGroups(Control Groups)-资源管理
– NameSpace-进程隔离
– SELinux安全
• 由于是在物理机上实施隔离,启动一个容器,可以像启动一个进程一样快速
什么是Docker
• Docker是完整的一套容器管理系统
• Docker提供了一组命令,让用户更加方便直接地使用容器技术,而丌需要过多关心底层内核技术

Docker优点
• 相比于传统的虚拟化技术,容器更加简洁高效
• 传统虚拟机需要给每个VM安装操作系统
• 容器使用的共享公共库和程序
• 容器运行多个系统服务占用资源小,但不能同时运行不同的系统服务,VM可以。
20180628094302214.png

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

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

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

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

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

安装软件包:
  1. docker-engine-selinux-1.12.1-1.el7.centos.noarch.rpm

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

  3. [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

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

  5. [root@docker_1 docker]# systemctl enable docker.service
复制代码


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


—镜像常用命令
  1. docker images         //查看镜像
  2. docker search 文件名    //搜索镜像
  3. docker pull    文件名   //下载镜像
  4. docker push    //上传镜像
  5. docker load < 文件名.tar  //导入镜像文件(格式为.tar) 例:docker load <nginx.tar
  6. docker save image_name > xx.tar   //导出镜像包,镜像名可以docker images查看,REPOSITORY下面名字
  7. docker run -it 镜像名称:镜像标签 启动命令  //启动运行镜像 例:docker run -it night:night01 bash
复制代码
  1.         //-i 表示交互 -t表示终端
  2.         例:docker run -it centos /usr/bin/python //只要可以执行的命令都可以
  3.         [root@docker_1 ~]# docker run -it centos /bin/ls
  4.         anaconda-post.log  dev    home  lib64  mnt  proc    run   srv  tmp    var
  5.         bin      etc    lib   media  opt  root    sbin  sys  usr
复制代码
docker inspect  镜像名称:镜像标签 // 获取容器/镜像的元数据。主要查看CMD后面的命令
  1.             "Cmd": [
  2.                 "/bin/sh",
  3.                 "-c",
  4.                 "#(nop) ",
  5.                 "CMD ["nginx" "-g" "daemon off;"]"
复制代码
  1. docker ps //  查看已开启的容器加 -a 查看所有容器
  2. docker history 镜像名 //查看镜像制作历叱
  3. docker rmi 镜像名 //删除本地镜像
  4. docker save 镜像名 > 文件名.tar   //镜像另存为tar包
复制代码

—容器常用命令
--后面加容器ID
  1. docker run //运行容器
  2.     //-i交互式 -t终端 -d后台进程
  3.     //注意:启用一个有交互式的进程又要放后台进程用-itd , 单纯无交互放后台直接-d即可
复制代码
docker ps //查看容器列表 没加-a表示正在运行的容器 加-a查看所有容器 -q查看ID号
docker stop //关闭容器
  1. docker start //启动容器

  2. docker restart //重启容器

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

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

  5. docker top //查看容器进程列表 相当于在容器里执行ps查看这个容器的进程
复制代码
//容器的进程在运行它的物理机上可以查看到,隔离性没有KVM那么好
docker rm //删除容器
  1.         [root@docker_1 docker]# docker rm $(docker ps -qa)  //删除所有容器

  2.         [root@docker_1 docker]# docker stop $(docker ps -q) & docker rm $(docker ps -aq)
复制代码
—镜像制作

1)手动修改镜创建镜像
-docker commit 镜像ID 新镜像名称:新镜像标签
先启动一个镜像,再编缉修改好后,用commit命令制作新镜像,可以再导出镜像备用
  1. [root@docker_1 test]# docker exec -it 2ce7c487b29d bash
  2. [root@2ce7c487b29d bin]#  //部署好自己想要的软件服务
复制代码
  1. [root@docker_1 test]# docker ps
  2. CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                      NAMES
  3. 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
  4. [root@docker_1 test]# docker commit 2ce7c487b29d myos:myos

  5. sha256:e51e0bf50e22fe712b9eea31583a83ac08749a0e55b48a000ff78a8c1129e2f8
复制代码

2)docker脚本创建镜像
  1. -docker build -t   镜像:标签 dcocker脚本路径
复制代码
//注意问题:如果配置文件写错或不规范会导致创建失败,

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

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

复制代码

--示例:

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

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

  1. [root@docker_1 test]# cat Dockerfile
  2. FROM centos_lcf:latest
  3. RUN yum -y install openssh-server.x86_64 httpd
  4. ENV EnvironmentFile=/etc/sysconfig/httpd
  5. ENV EnvironmentFile=/etc/sysconfig/sshd
  6. RUN /usr/sbin/sshd-keygen
  7. RUN echo "1" | passwd --stdin root
  8. WORKDIR /var/www/html
  9. RUN echo "hello aaaaaaaaaaa" >index.html
  10. EXPOSE 80
  11. EXPOSE 22
  12. WORKDIR /bin
  13. RUN echo  "#!/bin/bash" >ngssh
  14. RUN echo  "/usr/sbin/sshd -D & " >>ngssh
  15. RUN echo  "/usr/sbin/httpd -DFOREGROUND" >>ngssh
  16. RUN chmod 777 ngssh

  17. CMD sh /bin/ngssh
复制代码


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

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

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


......

  1. Successfully built 470176bc952d
  2. [root@docker_1 test]# docker images
  3. REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
  4. myos                myos                e51e0bf50e22        22 minutes ago      382 MB
  5. myhttp              myhttp              470176bc952d        About an hour ago   381.9 MB
  6. centos_lcf          latest              c6fac7560757        8 hours ago         326.1 MB
  7. [root@docker_1 test]# docker run -itd -p 90:80 -p 1190:22 myhttp:myhttp  //创建容器测试
  8. 6ede4e8a4dc8310a336e36c26c2f3c740e72113950c3e2427072571dd2c56336
  9. [root@docker_1 test]# docker ps
  10. CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                      NAMES

  11. 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) 服务端

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

  2. {
  3. "insecure-registries":["192.168.1.10:5000"]            
  4. }

  5. [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.

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

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

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

  3. [root@docker_1 docker]# systemctl restart network   
复制代码



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|不学网

GMT+8, 2018-7-23 23:52

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表