ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Docker01--介绍与安装、镜像和容器操作、应用部署

2022-08-22 01:01:59  阅读:131  来源: 互联网

标签:容器 run -- Docker01 镜像 docker id


https://www.cnblogs.com/liuqingzheng/p/16315254.html

0 docker内容

详细内容:http://www.liuqingzheng.top/linux/Linux系列教程/

1 docker介绍,跟传统虚拟机的比较
2 安装docker,启动
3 镜像
4 容器
5 网络
6 数据卷
7 私有仓库
8 备份回顾
9 dockerfile
10 单机容器编排 docker-compose

1 docker介绍

# 0 各种软件用什么语言写的   基本都是运维需要使用的
  zabbix    :php     # 监控软件
  Prometheus:go      # 监控软件  被称普罗米修斯
    
  ansible   :python  # 批量管理主机,执行命令, 无客户端(angent)
  salstack  : python  # 批量管理主机,执行命令,有客户端(angent)  # 主机数量特别多 速度更快
        
  openstack :python  # 云计算,管理虚拟机
  jekins    :java    # 自动化部署  ci/di 持续集成/部署
    
  docker    :go      # 虚拟容器技术
  k8s       :go      # 管理容器


# 1 什么是虚拟化?
    虚拟化:打破实体结构间的不可切割的障碍
    
    
# 2 vmware、kvm  openstack   docker  k8s等 名词含义

    - vmware、kvm:是虚拟化技术,能够直接从硬件上或操作系统上虚拟化出多个不同的操作系统(云服务器)
    
    - opensatck、阿里飞天: 是亚马逊、阿里云、腾讯云等云商家,用来管理虚拟化出来的操作系统
        
    - docker:进程级别的隔离   # 一般:装在虚拟机  或 云服务器上
      一个云服务器上可以跑出成几百个docker容器,成百上千的服务器上,就会有个上万个容器
    
    - k8s: 用来管理不同机器的上万个docker容器   # 大型公司才会使用这个服务
    
    
# 3 什么是docker?  诞生于2013年
    - Go语言实现,开始收费 --> 濒临倒闭 --> 开源出来,很多人用
    - docker-ce (社区版 免费),docker-ee (企业版收费)
    - 通过go语言对lxc技术的一个封装
    
    
# 4 容器与虚拟机比较
    虚拟机:是完整的虚拟化技术,其中包括虚拟硬件和操作系统等,也会占据一定的资源消耗
    
    docker:不需要虚拟硬件,是进程级别(应用)的隔离,只需要隔离网络和数据等,
       轻量级,占用体积小,启动快
        
    # 简单理解:
       传统虚拟机 是同一个硬件上    隔离出多个操作系统
       docker   是同一个操作系统上 隔离出多个应用进程   # 更快 更小
    
    
# 5 docker是一个客户端-服务器(C/S)架构程序(mysql,redis都是cs架构)  整套符合RESTful API


# 6 docker非常重要的概念: 镜像(image) 与 容器(container)
    有了镜像  ---> 镜像运行起来是容器(真正的执行单位)
    面向对象的类    对象
    
    
# 7 镜像是从哪里来的?
    镜像就是一堆文件
    从远程仓库获取(拉取)

2 docker架构图

3 docker安装

3.1 Windows

windows安装(不建议你装)

http://get.daocloud.io/

3.2 Ubuntu

# 0 卸载
sudo apt-get remove docker docker-engine docker.io containerd runc

# 1 安装必要工具
sudo apt-get update
sudo apt-get install apt-transport-https  ca-certificates curl gnupg-agent software-properties-common
    
# 2 安装GPG证书
# 官方
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# 换成阿里云
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
    
# 3 写入软件源信息
# 官方
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# 换成阿里云
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"


# 4 更新并安装docker-ce
sudo apt-get -y install docker-ce

# 5 开启docker服务
systemctl status docker

3.3 Centos

# 官方建议docker运行在centos7 以上的系统
  docker是在linux3.1以上内核中写出来的,在乌班图下开发完成的  docker的新特性在乌班图先看到

# 若centos6.8安装docker,需要升级内核版本  (自行搜索)
  


# 0 卸载 (未安装 不用卸载)
yum remove docker docker-common  docker-selinux docker-engine
rm -rf /var/lib/docker

# 1 更新yum
yum update

# 2 安装需要的软件包   yum-util 提供yum-config-manager功能
yum install -y yum-utils device-mapper-persistent-data lvm2

# 3 设置yum源为阿里云   将包含docker的阿里云源 添加到本地yum源中
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
# 4 安装 
yum install -y docker-ce

# 5 验证安装(查看版本)
docker -v  
  Docker version 19.03.12, build 48a66213fe  # 19年03月12日发布
  # 自从分了docker-ce和docker-ee以后,以年份命名版本


# 6 启动docker服务
systemctl start docker

# 7 停止docker服务
systemctl stop docker

# 8 重启docker服务
systemctl restart docker

# 9 开机启动	
systemctl enable docker

# 10 查看概要信息
docker info   # 管理docker的运维平台 查看服务端docker状态 

3.4 远程仓库换源

# 注册-登录  https://hub.docker.com/  官方
# 可以上传镜像 (类似于github)  把制作的镜像传上去,别人可以下载使用


# 配置加速 (之前去https://hub.docker.com/)  阿里云/清华 做了一个备份  配置好以后再拉镜像会去国内地址拉取

第一步:
vi /etc/docker/daemon.json  

第二步:
{
    "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

4 镜像操作

# -1 第一个hello-world   (没有任何意义)
docker run hello-world
    1 客户端连到服务端,服务端下载了hello-world镜像
    2 通过镜像跑起容器来
    3 容器输出一些东西,通过服务端发送给客户端,客户端展示在窗口里了
    
# 0 查找镜像
方式一:https://hub.docker.com/ 点点点搜索  # 用这种  官方网站中查找
方式二:docker search 镜像名字
        
# 1 拉取镜像 
docker pull hello-world   # 默认:最新版本 latest
docker pull hello-world:nanoserver
           
# 2 查看镜像   机器上有哪些镜像
docker images
  REPOSITORY  TAG   IMAGE ID   CREATED    SIZE
  镜像名字      版本   id号      创建时间   大小
    
# 3 删除镜像
docker rmi 镜像名字/id号
  # 如果还有基于这个镜像的容器,是不允许删除镜像的 先删除容器,再删除镜像
    
  # 删除所有镜像   慎重 最好不要用!!! 老老实实的复制粘贴 id   容器同理!!!
  docker rmi `docker images -q`  # 先查出所有镜像的id 再删除 
    
      
# 4 练习:拉取python3.6镜像,redis最新镜像,mysql5.7镜像
docker pull python:3.6
docker pull redis
docker pull mysql:5.7
docker pull centos:centos7
docker pull nginx
        
# 5 镜像是什么?
就是一堆文件,这堆文件通过docker跑起来 就变成了容器
  # 理解:
    现在就把它当成 一个操作系统内  跑了这个软件  # eg: redis镜像: Linux操作系统+redis
    假设centos7的镜像跑起来了容器,就当成在宿主机上跑了一个centos7的操作系统 # 等同于centos的虚拟机
    
        
# 6 补充 (了解)
# 查看镜像的详细信息
docker image inspect 镜像id  46ff56815c7c

docker image ls  <==>  docker images
docker image rm  <==>  docker rmi

5 容器操作

# 1 删除容器   容器停止才能删除
docker rm 容器名字/容器id
    
# 2 启动并运行容器      通过centos:centos7镜像,创建一个名字叫mycentos的容器,并且把它运行起来
docker run -di --name=mycentos centos:centos7
   # 输出结果:打印出容器的id号
    
# 3 查看正在运行的容器
docker ps
    
# 4 查看所有容器  包括停止的
docker ps -a
    
# 5 停止容器
docker stop 容器名字/id
    
# 6 启动容器
docker start 容器名字/id
    
    
# 7 容器的创建和启动(******)
# 方式一:了解
  # 创建:
    docker create --name=容器名  基于的镜像  容器启动后执行的命令 (# 可以不写,会有默认的夯住命令)
      eg: docker create --name=test-container centos:centos7 ps -A
  # 启动
    docker start test-container
    
  # 容器可以一直运行的原因  ***  这是为什么有些容器启动后,自动停止的主要原因!!!
    它有一条前台进程,一直在运行  # 容器默认的命令没有结束,容易就会一直运行
    
  # 容器启动时:
    默认执行一个命令  如果该命令结束,该容器也就停止结束
    # eg: centos 启动后是bash脚本 '/bin/bash'
    # 故:以后如果自己制作的镜像,运行起容器,必须有个可以夯住的命令
                
        
# 方式二:通过run命令创建并启动   指定不同的参数执行
  -i:表示运行容器
  -t:表示容器启动后会进入其命令行
    # 如果只加-i -t两个参数,创建后就会自动进去容器 (并不是真正的进入,而是分配一个伪终端来交互)  

  -d:表示创建一个守护式容器在后台运行
    # 这样创建容器后,不会自动登录容器
    
  --name:为创建的容器命名 
    # 如果不写,会自动分配一个名字(英文人名)
    
  -v:表示目录映射关系   前者是宿主机目录:后者是容器目录  映射到宿主机上的目录  
    # 可使用多个-v 做多个目录或文件映射
    # 注意:最好做目录映射(目录挂载),在宿主机上做修改,然后共享到容器上

  -p:表示端口映射关系   前者是宿主机端口:后者是容器内的映射端口
    # 可使用多个-p 做多个端口映射
  
  # eg:
    docker run -it --name=myredis redis  # 后面可跟默认命令  '/bin/bash'
    	
# 注意:
  执行命令:docker run 镜像  # 如果本地没有该镜像,会先去仓库pull,再run

 
# 8 进入容器的几种方式   并不是真的进入,只是建立了可以操作容器内部的连接通道
第一种:  # 常用 ***** 
  docker exec -it  容器id  /bin/bash
    
    # 1.原理  docker exec 容器id 命令语句
        exec真正的作用是在容器内执行命令  只是'/bin/bash'正好会开一个bash窗口
        # eg: docker exec 容器id ls 
       
    # 2.与 docker run -it 容器id 的区别:
        该方式相当于新建了一个连接终端,故退出时,docker不会随即停止  
        # docker启动时的夯住命令还在,原连接终端没有断开。
    
      run -it 的方式,退出的话,会断开默认连接,导致容器也自动停止了
      
第二种:
  ssh连接  # 前提: 容器内部需要装ssh服务端
    
    
# 9 退出
exit
    
    
# 10 文件拷贝
docker cp 源地址  目标地址 

宿主机 ---> 容器内
  docker cp lqz.txt 容器id:/home
        
容器内 ---> 宿主机
  docker cp 容器id:/home/lqz.txt /app
            
            
# 11 目录挂载(目录映射)    前者是宿主机目录:后者是容器目录 
docker run -di --name=mycentos99 -v /home/lqz:/home centos:centos7
  # 一旦挂载,以后双方操作,互相影响

  # 共享的是多级目录时,可能会出现权限不足的提示
    --privileged=true   # 原因:CentOS7中的安全模块selinux把权限禁掉了
    
    
# 12 端口映射   前者是宿主机映射端口:后者是容器运行端口
docker run -di -p 6377:6379 redis:latest 
  # 了解:redis镜像启动容器时,默认命令是 'docker-entrypoint.sh' 
         # 执行的是 '/usr/local/bin/docker-entrypoint.sh' 脚本
    
    
# 13 查看容器详细信息
docker inspect 容器名称(容器ID)

# 14 查看容器ip地址  
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称(容器ID)
        
# 每个启动的容器都各自的ip地址 (局域网 宿主机及其他容器可相互访问)  
   eg: 其他容器的项目  可访问  redis容器ip+6379

6 应用部署

# docker部署 mysql

# -e表示添加环境变量  MYSQL_ROOT_PASSWORD 是root用户的登陆密码
docker run -di --name=mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
        
# 官方提供的
docker run --name some-mysql -v /my/own/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
        
        
# docker部署 redis
docker run -di -p 6377:6379 redis:latest
        
        
# docker部署 nginx
docker run -di --name=mynginx -p 8080:80 nginx

标签:容器,run,--,Docker01,镜像,docker,id
来源: https://www.cnblogs.com/Edmondhui/p/16611531.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有