美文网首页
Docker基础总结

Docker基础总结

作者: 北沐城歌__ | 来源:发表于2022-01-13 12:46 被阅读0次

    Docker说明(一)

    常用的docker需要的网站:
    Docker官网: https://www.docker.com/
    Docker中文社区: http://www.docker.org.cn/
    Docker HUB: https://hub.docker.com/

    Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、 bare metal、OpenStack 集群和其他的基础应用平台。 Docker 提供了一个可以运行你的应用程序的封套(envelope),或者说容器它原本是 dotCloud 启动的一个业余项目,并在前些时候开源了。它吸引了大量的关注和讨论,导致 dotCloud 把它重命名到 Docker Inc。它最初是用 Go 语言编写的,它就相当于是加在 LXC(LinuX Containers,linux 容器)上的管道,允许开发者在更高层次的概念上工作。

    Docker也是一个云计算平台,它利用Linux的LXC、AUFU、Go语言、cgroup实现了资源的独立,可以很轻松的实现文件、资源、网络等隔离,其最终的目标是实现类似PaaS平台的应用隔离。

    Docker 会像一个可移植的容器引擎那样工作。它把应用程序及所有程序的依赖环境打包到一个虚拟容器中,这个虚拟容器可以运行在任何一种 Linux 服务器上。这大大地提高了程序运行的灵活性和可移植性,无论需不需要许可、是在公共云还是私密云、是不是裸机环境等等。

    Docker通常用于如下场景:

    • web应用的自动化打包和发布;
    • 自动化测试和持续集成、发布,CI/CD 持续集成/持续部署 ;
    • 在服务型环境中部署和调整数据库或其他的后台应用;
    • 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。

    底层技术

    码头工人写在GO编程语言并利用Linux内核的几个特性来交付其功能。Docker使用了一种叫做namespaces若要提供称为集装箱。运行容器时,Docker将创建一组命名空间为了那个容器。这些命名空间提供了一层隔离。容器的每个方面运行在单独的名称空间中,其访问权限仅限于该名称空间。

    Docker与虚拟机区别
    传统虚拟机 Docker
    依赖物理CPU和内存,是硬件级别的。 在操作系统上,利用操作系统的containerization( 集装箱化) 技术,可以在虚拟机上运行。
    一般都是指操作系统镜像,比较复杂。 docker开源而且轻量,称为“容器”,单个容器适合部署少量应用。
    使用快照来保存状态。 引入了类似源代码管理机制,将容器的快照历史版本一一记录。
    在构建系统的时候较为复杂,需要大量的人力。 docker可以通过Dockfile来构建整个容器,重启和构建速度很快。更重要的是Dockfile可以手动编写,这样应用程序开发人员可以通过发布Dockfile来指导系统环境和依赖,这样对于持续交付十分有利。
    Docker特性
    文件系统隔离 每个进程容器运行在完全独立的根文件系统里
    资源隔离 可以使用cgroup为每个进程容器分配不同的系统资源,例如CPU和内存
    网络隔离 每个进程容器运行在自己的网络命名空间里,拥有自己的虚拟接口和IP地址
    写时复制 采用写时复制方式创建根文件系统,这让部署变得极其快捷,并且节省内存和硬盘空间。
    日志记录 Docker将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索。
    变更管理 容器文件系统的变更可以提交到新的映像中,并可重复使用以创建更多的容器。无需使用模板或手动配置。
    交互式shell Docker可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互shell。
    Docker 工作原理

    Docker 使用客户端-服务器 (C/S) 架构模式。Docker 客户端会与 Docker 守护进程进行通信。Docker 守护进程会处理复杂繁重的任务,例如建立、运行、发布你的 Docker 容器。Docker 客户端和守护进程可以运行在同一个系统上,当然你也可以使用 Docker 客户端去连接一个远程的 Docker 守护进程。Docker 客户端和守护进程之间通过 socket 或者 RESTful API 进行通信。

    Docker 守护进程 Docker 守护进程运行在一台主机上。用户并不直接和守护进程进行交互,而是通过 Docker 客户端间接和其通信。
    Docker 客户端 Docker 客户端,实际上是 docker 的二进制程序,是主要的用户与 Docker 交互方式。它接收用户指令并且与背后的 Docker 守护进程通信,如此来回往复。

    Docker内部组件

    Docker 镜像 - Docker images
    Docker 仓库 - Docker registeries
    Docker 容器 - Docker containers

    docker类型 说明
    Docker镜像 Docker 镜像是 Docker 容器运行时的只读模板,每一个镜像由一系列的层 (layers) 组成。Docker 使用 UnionFS 来将这些层联合到单独的镜像中。UnionFS 允许独立文件系统中的文件和文件夹(称之为分支)被透明覆盖,形成一个单独连贯的文件系统。正因为有了这些层的存在,Docker 是如此的轻量。当你改变了一个 Docker 镜像,比如升级到某个程序到新的版本,一个新的层会被创建。因此,不用替换整个原先的镜像或者重新建立(在使用虚拟机的时候你可能会这么做),只是一个新 的层被添加或升级了。现在你不用重新发布整个镜像,只需要升级,层使得分发 Docker 镜像变得简单和快速。
    Docker 仓库 Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。同样的,Docker 仓库也有公有和私有的概念。公有的 Docker 仓库名字是 Docker Hub。Docker Hub 提供了庞大的镜像集合供使用。这些镜像可以是自己创建,或者在别人的镜像基础上创建。Docker 仓库是 Docker 的分发部分。
    Docker 容器 Docker 容器和文件夹很类似,一个Docker容器包含了所有的某个应用运行所需要的环境。每一个 Docker 容器都是从 Docker 镜像创建的。Docker 容器可以运行、开始、停止、移动和删除。每一个 Docker 容器都是独立和安全的应用平台,Docker 容器是 Docker 的运行部分。

    容器特点

    • 灵活:即使最复杂的应用程序也可以容器化。
    • 轻量级:容器利用并共享了主机内核,在系统资源方面比虚拟机更加有效。
    • 可移植性:您可以在本地构建,部署到云并在任何地方运行。
    • 松散耦合:容器是高度自给自足并封装的容器,使您可以在不破坏其他容器的情况下更换或升级它们。
    • 可扩展:您可以在数据中心内增加并自动分布容器副本。
    • 安全:容器将积极的约束和隔离应用于流程,而无需用户方面的任何配置。

    Docker安装(二)

    登陆到 清华大学开源软件站 下载docker的相关镜像。


    可以看到docker-ce.repo 右键->复制链接地址 在Linux中的下载此文件到/etc/yum.repo.d目录下
    在网页上点击进入目录或者直接访问此仓库地址可以查看此仓库中是否有我们需要的版本
    https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/x86_64/stable/Packages/
    • 安装 Docker Engine-Community
    yum install -y yum-utils device-mapper-persistent-data   lvm2
    wget https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo --no-check-certificate
    

    刚才下载的docker-ce.repo可以看到系在地址指向并非清华大学镜像仓库,因此我们需要替换为清华大学镜像地址(替换是为了速度下载速度快一些)

    yum install -y yum-utils device-mapper-persistent-data lvm2
    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 添加稳定的yum源头
    yum list docker-ce --showduplicates | sort -r 安装特定的yum源头
    yum -y install docker-ce-18.06.3.ce-3.el7
    yum -y install docker
    docker -v
    systemctl status docker
    systemctl start docker
    systemctl enable docker
    systemctl list-unit-files | grep docker 查看docker是否是在自启动的状态

    docker指令

    Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? 出现这个指定的话说明docker没有运行
    docker -h 是查看所有的指令操作
    [root@localhost ~]# ll /var/run/docker.sock
    srw-rw----. 1 root docker 0 Nov 4 22:54 /var/run/docker.sock
    docker info 查看系统信息
    docker run 是核心的命令
    docker search hello-world 是查找镜像的命令
    docker pull hello-world 是下载镜像的命令,默认的话是从docker-hub上面下载 :latest表示的是最新的版本
    然后通过docker images 来查看相关的镜像的下载情况,想象成一个光盘就行

    开始运行一个新的容器 docker run hello-world
    docker ps -a 容器运行完之后看一下相关的状态 -a表示的是所有的进程,一种是已经停止的,一种是正在运行的。
    docker -i 交互模式
    docker -t 分配一个终端
    docker -d 后台运行
    docker -name 指定容器的名称

    例如下载一个nginx
    docker search docker 查找相关的镜像源头
    docker pull nginx 意思是下载镜像
    docker run --name mywebserver -it nginx
    docker ps
    平时的docker的过程 :
    docker pull: 后面会跟一个版本号,latest 表示的是最新版本的
    docker run hello-world 运行镜像然后自动就退出了
    docker ps -a 看所有的镜像的内容

    运行容器
    -i 交互模式
    -t 分配一个终端
    -d 后台运行
    -p 端口绑定
    -none 指定容器的名称
    1-后台运行容器
    --name 的记得更改名称
    docker run --name mywebserver01 -itd nginx
    2-删除容器
    rm 强制删除容器 docke rm mywebserver
    或者通过指令id来删除 docker rm 39cdda5b4d41
    后台来运行的 docker run --name mywebserver -itd nginx 后台运行的
    docker info 查看相关的信息等操作

    容器的生命周期

    下载镜像 docker pull hello-world
    查看本地镜像 docker images
    run 运行容器 -i交互模式 -t分配一个终端 -d指定容器名称

    容器相关的命令
    ps 查看容器的运行状态,正在运行,已经停止的
    docker ps
    docker ps -a
    docker run [options]
    docker run hello-world
    docker run --name mywebserver -itd nginx
    docker attach webserver 展示输出日志信息
    docker diff webserver 容器发生变化就会通过这个来查看

    容器控制 start/restart /stop/stats
    docker ps 看docker进程状态等
    docker stop mywebserver
    docker start mywebserver
    docket stats mywebserver

    info 系统信息
    docker info 显示容器信息
    docker logs mywebserver 查看相关的日志信息
    logs 查看容器的日志 (-f 动态的分析)
    docker pause mywebserver
    docker ps 可以看到stats 是暂停的(paused)
    docker unpause mywebserver 取消暂停
    rename 重命名 docker rename -h
    docker rename mywebserver webserver
    看下docker的重命名为docker rename mywebserver webserver
    docker inspect webserver 查看所有的docker 的信息
    显示所有的详细信息
    history 历史记录

    镜像的操作
    查看镜像的更新历史
    docker history nginx
    docker ps
    docker ps -a 查看进程
    关闭容器进程 docker kill webserver
    查看容器运行的进程 docker top webserver

    top 查看容器进程
    docker top webserver

    info 系统信息
    docker port -h 查看端口信息
    docker port webserver 绑定端口信息

    进入相关的容器链接

    exec 连接容器执行命令
    docker exec -it mywebserver bash
    curl 127.0.0.1 要登录到相关的容器里面 连接到里面
    docker stop webserver
    docker rm webserver
    docker rmi webserver

    执行相关的操作,如何外部才可以进行访问,-p相关的访问
    docker run --name webserver -p 8000:80 -itd nginx
    docker port webserver 查看端口相关信息
    80/tcp -> 0.0.0.0:8000
    curl 127.0.0.1:8000 就访问到相关的nginx里面了
    port 显示相关端口信息

    复制服务器里面的内容到容器里面
    docker run itd --name webserver nginx
    docker restart webserver 重启容器
    docker ps 看下相关的进程在不在

    文件复制,从容器和从外部直接复制
    [root@localhost ~]# docker cp /etc/hosts webserver:/tmp
    [root@localhost ~]# docker exec -it webserver ls /tmp
    hosts

    [root@localhost ~]# docker cp webserver:/tmp/hosts ./
    [root@localhost ~]# ls
    anaconda-ks.cfg hosts

    打包相关的镜像文件,导出镜像文件到本地
    [root@localhost ~]# docker export -o test.tar webserver

    login/logout docker registry
    注册一个账号 docker hub 账号 ,这里选择一个选择一个免费的版本
    邮件激活
    login in 创建一个仓库
    login login 登陆相关的网站 注册一个相关的账户信息等

    镜像操作
    docker pull centos:7 下载镜像
    docker images 查看镜像操作等
    tag 重命名操作
    docker tag hello-world:latest devopsvip/docker:latest

    docker push 上传到镜像仓库里面
    docker push devopsvip/docker:latest 上传相关的应用

    无法上传docker镜像
    docker login

    commit 提交一个新的变化
    docker pull devopsvip/docker:latest 下载镜像信息
    docker images

    docker login 登陆到里面就行了
    docker commit -h
    docker history
    docker commit -h 看下使用方法
    docker history devopsvip/docker
    docker commit -o 'devopsvipxx' devopsvip/docker
    docker restart webserver
    docker commit -o "devopsvipxx" webserver
    docker history webserver

    docker build 构建镜像
    Dockerfile
    里面写内容为 FROM webserver 这个镜像来操作
    docker build -t devopsvip/docker:v1 .
    docker images 查看镜像的相关操作是否是正常的


    Docker指令容器
    docker -h 查看所有的指令
    docker version 看版本信息 
    docker info 看系统信息 
    docker run 
    docker search hello-word  查看镜像
    docker pull hello-world   下载镜像(默认的是docker hub)
    docker images 查看镜像信息 
    docker run hello-world  启动一个镜像
    docker ps -a  检查所有的进程 一种是正在运行的,一种是已经停止的 
    run 运行容器 
    -i: 交互模式 
    -t: 分配一个终端 
    -name 指定容器的名称 
    下载一个nginx  docker pull nginx 
    docker run --name mywebserver01  -itd nginx  
    删除容器 docker rm mywebserver 
    docker run --name mywebserver -itd nginx  后台运行方式 
    docker ps    看进程是否在运行等
    docker stop mywebserver  停止镜像
    docker ps    查看进程状态
    docker start mywebserver 开启镜像  
    docker restart mywebserver 重启该容器操作  
    docker logs mywebserver 查看日志  加-f (动态日志显示)
    docker pause mywebserver 暂停容器
    docker unpause mywebserver 开始容器操作
    docker rename -h 看使用名称 
    docker  rename mywebserver  webserver  重命名该名称 
    docker ps 看相关的状态信息
    docker inspect webserver  查看容器的信息等
    docker kill webserver  杀掉停止容器操作,关闭容器进程
    docker top webserver 
    docker top webserver 7153  看相关的进程状态
    docker ps -a 看docker的状态 
    docker port -h 
    docker port webserver 
    docker exec -it  webserver bash  在容器里面执行命令 
    ls 执行命令,查看相关的命令状态
    docker rm webserver 删除镜像
    映射端口
    docker stop webserver 
    docker rm webserver 
    docker run --name webserver -p 8000:80 -itd nginx    把相关的端口映射到80端口 实现外部的访问
    curl 127.0.0.1:8000 可以看相关的nginx的界面
    docker port webserver  可以查看端口变化了已经
    docker attach webserver 可以输出相关的日志信息什么
    port 显示容器端口的信息 
    docker port webserver 
    拷贝相关的文件信息 
    docker  cp   /etc/hosts   webserver:/tmp 
    docker  exec   -it   webserver  ls  /tmp   执行相关的命令步骤
    docker diff webserver  查看不同,容器发生变化都会通过这个知道
    docker  cp webserver:/tmp/hosts ./  把容器里面的内容复制到本地
    docker events webserver   
    login   登陆 
    logout 注销
    注册docker hub      登陆网址:https://hub.docker.com/
    登陆docker hub 输入命令docker login
    登出命令的话是   docker logout 是登出的命令  
    
    
    Docker镜像指令
    docker history (webserver)nginx  查看镜像历史命令
    docker history(webserver )nginx 1191 查看进程号信息
    镜像导出 
    docker export -o test.tar webserver  将webserver镜像导出
    docker pull centos:7     将centos7的镜像下载下来进行操作 
    docker images 查看下载镜像的信息等操作 
    给镜像增加一个新的标签,改名字操作
    docker tag hello-world:latest  hhdocker123/docker:latest    增加新的镜像操作
    docker  images 查看下载镜像的信息
    下载私有的仓库的内容和信息等
    docker push hhdocker123/docker:latest
    登陆 docker login    
    docker push hhdocker123/docker:latest 将镜像上传到私有的仓库
    删除镜像 
    docker images 
    docker rmi  devopsvip/docker:latest   把本地的镜像删除掉     rmi删除镜像 
    docker rmi hhdocker123/docker:latest
    docker images 
    docker pull hhdocker123/docker:latest  下载镜像的操作 把镜像下载下来
    执行 docker logout  如果想要在下载的话,需要重新的登陆上去
    docker history hhdocker123/docker  查看历史的命令信息
    更改提交images
    docker restart webserver
    docker commit -a "devopsvipxx"  webserver
    docker inspact webserver  查看所有的属性信息啥
    将容器变成镜像 用commit 这个语句来运行
    
    Docker镜像构建
    Dockerfile   FROM nginx  
    docker build .                            如果是在当前的目录下面
    docker build -f aa/Dockerfile  .  如果是在不同的目录下面
    docker build -t webserver:v2    指定标签的名称为v2 的名称
    docker import  test.tar webserver:v2  导入压缩文件到镜像 
    docker history webserver:v2 查看相关的历史记录
    docker save -h 
    docker load  -h 
    docker save -o webserver-v2.tar webserver:v2  将镜像的的包导出下来
    docker rmi webserver:v2  删除镜像 
    docker load -i webserver-v2.tar 加载相关的镜像
    load 通过归档文件加载镜像
    save 将镜像保存下来 
    scp webserver-v2.tar root@192.168.1.200:/tmp 将镜像远程
    docker images|grep webserver 查看相关的镜像信息
    
    docker create --name webnewserver nginx    创建一个新的容器
    docker ps -a  看容器的进程等
    docker start webnewserver
    docker update --cpu-quota  1000 webnewserver  更改cpu
    docker update --cpus 2 webnewserver 
    docker update --cpus 3  webnewserver  设置cpu的数量
    docker ps  -a 
    docker ps 
    docker inspect webnewserver
    docker stats webserver     看内存的状态信息等
    docker update --memory 1G --memory-swap 1G webserver
    
    Docker前端项目容器化
    -------------------手工来部署
    下载相关的镜像
    git clone https://github.com/dockersamples/node-bulletin-board
    git config --global http.postBuffer 20000000
    git config --global http.postBuffer 50M
    安装npm
    Linux 上安装 Node.js
    直接使用已编译好的包Node 官网已经把 linux 下载版本更改为已编译好的版本了
    我们可以直接下载解压后使用:
    # wget https://nodejs.org/dist/v10.9.0/node-v10.9.0-linux-x64.tar.xz 
    # tar xf  node-v10.9.0-linux-x64.tar.xz       // 解压
    # cd node-v10.9.0-linux-x64/                  // 进入解压目录
    # ./bin/node -v                               // 执行node命令 查看版本
    v10.9.0
    解压文件的 bin 目录底下包含了 node、npm 等命令,
    我们可以使用 ln 命令来设置软连接:
    ln -s /usr/software/nodejs/bin/npm   /usr/local/bin/ 
    ln -s /usr/software/nodejs/bin/node   /usr/local/bin/
    cd  cd /root/newdocker/node-bulletin-board/bulletin-board-app
    npm init -y
    vi  package.json
    "private": true
    npm install 安装 npm 需要的包和软件
    npm start  
    然后访问 http://192.168.1.10:8080/ 可以看到前端的页面了
    ---------------使用docker来部署
    编写dockerfile 
    FROM node:current-slim    #基础的镜像 
    WORKDIR /usr/src/app      #指定工作目录
    COPY package.json .         #复制package.json文件
    RUN npm install                  #进行安装 
    EXPOSE 8080                    #绑定端口
    CMD [ "npm", "start" ]         #执行相关的命令运行 npm start
    COPY . .                             # 复制当前目录内容
    
    vim /etc/sysctl.conf
    #配置转发
    net.ipv4.ip_forward=1
    #重启服务,让配置生效
    systemctl restart network
    systemctl restart docker 重启docker进程
    docker build . 执行
    docker build -t bulletion:1.0 . 执行相关的标签和名称,生成一个镜像
    [root@localhost app]# docker images
    REPOSITORY           TAG            IMAGE ID       CREATED         SIZE
    bulletion            1.0            d04e4ac85e57   8 minutes ago   260MB
    可以看到相关的容器已经挂载到上面了
    然后开始运行,镜像生成了就可以运行了 
    镜像的实例化,创建容器 
    docker run -itd --name bb - p 8000:8080 bulletion:1.0  
    后台运行,然后想外部的8000端口绑定到8080端口上面运行
    [root@localhost app]# docker run -itd --name bb -p 8000:8080 bulletion:1.0 
    8092fd91163be2f41eb68e1bdfbcc4a906da3fa46edc5b2688844061638d89a4
    [root@localhost app]# docker ps 
    然后访问 http://192.168.1.10:8000/ 可以看到前端的页面了
    删除镜像删除容器操作--------
    docker stop bb 
    docker rm bb 
    docker rmi bulletin:1.0 
    docker rm --force  bb 
    docker rmi bulletin  
    
    上传Docker镜像
    登陆dockerhub 创建一个仓库,hhdocker123/bulletion:1.0 为共有的属性
    然后 docker images 查看相关的镜像名称 
    docker 通过 tag来更改名字 docker tag  bulletion:1.0  hhdocker123/bulletion:1.0
    docker push hhdocker123/bulletion:1.0  将镜像上传到仓库里面
    记得docker login  可以自己进行验证了
    
    Docker资源管理
    [root@localhost ~]# docker version
    docker plugin 管理插件
    docker system 
    docker config  ls 
    docker system info
    docker system df  检查docker的磁盘的使用
    docker builder 构建镜像,清除构建缓存
    docker container 容器管理命令 
    docker  network ls 
    创建数据
    docker ps
    docker exec -itd bb bash  进入到bb容器里面进行操作
    docker volume create --name myvolume 创建一个我的卷
    docker volume ls 查看数据卷的格式 
    docker volume inspect myvolume  查看卷组的模式信息情况
    ##将卷挂载给容器
    docker run -itd --name bb -v myvolume:/data:rw bulletion:1.0  
    docker exec -it bb bash  进入到bb容器中进行操作
    mkdir data 进入到该目录下面
    echo 1234 > 12.txt 
    exit 
    docker stop bb  停掉相关bb的容器操作
    docker start bb 开启容器 
    docker exec -it bb bash 进入到容器里面
    cd data   && ls 
    可以看到相关的12.txt 还是存在的,可以持久的保存下来
    exit 退出容器操作 
    docker  rm  --force bb  可以把bb容器给删除掉
    docker images 
    docker run -itd --name bb  bulletion:1.0 
    docker exec -it bb bash
    ls 数据丢失了,可以看到删除容器数据丢失
    exit 
    docker rm --force bb 删除容器就可以了
    -----可以发现删除容器,就是数据就没有了
    docker volume  ls 查看目前所有的卷
     docker volume create --name myvolume
    docker volume inspect myvolume  查看相关的卷组信息等
    cd /var/lib/docker/volumes/myvolume/_data  可以看到这个路径
    echo 11111 > a.txt  创建一个卷和一个数据
    docker run -itd -v myvolume:/data:rw bulletion:1.0  挂载卷组空间
    docker run -itd --name bb  -v myvolume:/data:rw bulletion:1.0
    docker exec -it bb bash
    cd  data/ 
    ls 
    cat a.txt
    exit 
    docker volume ls 
    docker volume inspect  myvolume 
    cd /var/lib/docker/volumes/myvolume/_data/ 可以看到下面的数据也发生了改变,和登陆容器里面的一样 ,就是把卷挂到容器里面去生成的文件信息等。
    mkdir /data/test 
    echo 1234 > /data/test/a.txt 
    exit 
    docker rm --force bb 
    可以看到/var/lib/docker/volumes/myvolume/_data 该路径下面的数据还在的
    然后在启动一个新的
    docker run -itd --name bb -v myvoume:/data:rw bulletion:1.0 
    docker exec -it bb bash 
    通过自定义相应的路径来进行挂载
    docker  run -itd --name cc -v /tmp/test:/data:rw bulletion:1.0 
    cd /tmp/test/  
    ls 
    echo 111 > a.txt 
    ls 
    docker exec -it cc bash 
    另外的一种说法是通过这种方式来进行操作,自定义路径
    docker run -itd --name cc -v /tmp/test:/data:rw bulletion:1.0
    docker ps
    
    Docker 网络管理
    交换机:数据帧传输
    路由器:网关 
    docker pull  centos:7   下载相关的镜像
    docker run -itd --name centos centos:7
    docker exec -it centos bash
    yum -y install net-tools*
    ifconfig   查看该容器的ip信息  
     inet 172.17.0.4  netmask 255.255.0.0  可以看到跟docker0的ip是一个网段的,是一个桥接的网络信息
    通过命令 
    [root@localhost ~]# docker network ls 
    NETWORK ID     NAME      DRIVER    SCOPE
    aaf66f6e9cb2   bridge    bridge    local
    e391895656a0   host      host      local
    8d7d59eb08aa   none      null      local
    [root@localhost ~]# ping 172.17.0.4
    PING 172.17.0.4 (172.17.0.4) 56(84) bytes of data.
    64 bytes from 172.17.0.4: icmp_seq=1 ttl=64 time=0.092 ms
    64 bytes from 172.17.0.4: icmp_seq=2 ttl=64 time=0.070 ms
    容器和容器之间也是可以通的是桥接的模式滴
    ------------通过划分vlan来区分来相关的作用
    docker network -h 
    docker network create mynet 
    docker network create mynet2
    docker network ls
    docker run -itd --name centos01  --net mynet  centos:7 
    docker run -itd --name centos02 --net mynet2 centos:7
    docker exec -it centos bash  执行相关的命令操作
    docker network connect mynet centos
    docker exec -it centos bash 
    eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 172.18.0.3  netmask 255.255.0.0  broadcast 172.18.255.255
            ether 02:42:ac:12:00:03  txqueuelen 0  (Ethernet)
            RX packets 8  bytes 656 (656.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 0  bytes 0 (0.0 B)
     
    
    编写Dockerfile
    docker build . 
    -f 指定dockerfile的位置
    -t 指定镜像的名称 
    格式:
    指令是不区分大小写滴,推荐大写,docker会按照顺序执行每一条命令。
    一个dockerfile 必须是通过from进行开始进行的
    #号是注释滴意思
    ------指令 
    env:表示滴是环境变量,声明容器里面的环境变量的
    第一个dockerfile
    # vi  Dockerfile 
    From centos:7 
    Env name zhangsan 
    USER $(name)
    #docker build .
    ----
    run指令-----------
    FROM centos:7
    RUN /bin/bash -c 'source $HOME/.bashrc;echo $HOME'
    RUN ["/bin/bash","-c","echo hello"]
    docker build . 
    docker build -t customtest:v1 .  --no-cache 创建一个镜像
    docker image history customtest:v1 可以看到该镜像的执行历史
    cmd指令-----------
    FROM centos:7
    RUN /bin/bash -c 'source $HOME/.bashrc;echo $HOME'
    RUN ["/bin/bash","-c","echo hello"]
    CMD ls
    CMD ["/bin/bash","-c","mkdir ./test"]
    docker ps -a |grep custom
    docker run -it customtest:v1
    #标签 ,LABEL lang='Java' version="1.0" appname='myservice'
    docker build -t custometest:v1 .  --no-cache
    docker image inspect custometest:v1 #看到镜像的详细
    #暴露,通过docker指定相关的端口信息
     expose 暴露端口,是唯一滴一个协议
    EXPOSE 80/tcp
    EXPOSE 80/udp 
    docker run -p 80:80/tcp -p 80:80/udp
    env 环境变量 
    docker run --env <key>=<value> 可以替换环境变量的信息
    ADD添加文件
    复制相关的文件信息
    docker build -t custometest:v1 . --no-cache
    docker run -it --name myserver customtest:v1 /bin/bash #
    docker rm --force myserver 删除容器
     docker run -it  custometest:v1 /bin/bash  #不用写名字可直接删除
    FROM centos:7
    RUN /bin/bash -c 'source $HOME/.bashrc;echo $HOME'
    RUN ["/bin/bash","-c","echo hello"]
    CMD ls
    #CMD ["/bin/bash","-c","mkdir ./test"]
    LABEL lang="Java" version="1.0" appname='myservice'
    ADD my.txt /tmp/
    ADD mydir/ /tmp/mydir
    ADD mytar.tar /home/
    ADD mytar.tar.gz /home/  带有一定的解压功能的
    docker build -t myserver:v1 -f Dockerfile2 . 通过另外一个文件来进行相关下载
    --VOLUME
    FROM centos:7
    RUN mkdir /myvol
    RUN echo "hello world" > /myvol/greeting
    VOLUME /myvol
    volume.dockerfile 
    docker build -t myserver:v1 -f volume.dockerfile  . #命
    令 构建容器
    默认是 docker build -t myserver:v1 . 可以直接的执行
    docker run -it --rm myserver:v1 进行相关文件的删除
    RUN useradd testuser
    USER testuser 
    RUN useradd -u 1009 testuser 
    USER 1009 
    --workdir 工作目录是容器中的目录
    WORKDIR /path/to/workdir 
    
    构建nginx镜像
    FROM centos:7
    RUN yum -y install nginx
    

    相关文章

      网友评论

          本文标题:Docker基础总结

          本文链接:https://www.haomeiwen.com/subject/nrvyoltx.html