• Docker简单介绍


    记得第一次知道容器这个词是2016年(技术渣),那时Openstack还如日中天,我安装了一个Ubuntu,翻了翻文档, 百度看了下仅有的几个博客,用蹩脚的操作安装上Docker(那时还部分ce,ee)就那几分钟,Docker就可以实现部署好几种应用来完成我的测试,发现docker这真是个神器,到今天为止,我也没有玩明白docker(没有长期的投入实践),包括以后的Kubernetes,Openshift,Rancher等等这些PaaS平台,也仅仅是部署,这里就不说原因了;从今天起,开始复习这些略识之无的东西,今天先复习一下命令。

    安装Docker

    这里以Centos7为例:

    1. 卸载系统自带的docker
    yum remove -y docker  docker-client  docker-client-latest  docker-common  docker-latest  docker-latest-logrotate  docker-logrotate  docker-selinux  docker-engine-selinux  docker-engine
    
    1. 添加Docker yum存储库
    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    
    1. 安装docker-ce
    yum install -y docker-ce
    
    1. 启动docker服务
    systemctl enable docker ; systemctl start docker
    
    1. 测试
    docker run hello-world
    

    如果需要卸载 记得卸载后删除 /var/lib/docker目录

    Docker 概念

    Docker是开发人员和系统管理员 使用容器开发,部署和运行应用程序的平台。使用Linux容器部署应用程序称为容器化。容器不是新的,但它们用于轻松部署应用程序。

    容器化越来越受欢迎,因为容器是:

    • 灵活:即使是最复杂的应用也可以集装箱化。
    • 轻量级:容器利用并共享主机内核。
    • 可互换:您可以即时部署更新和升级。
    • 便携式:您可以在本地构建,部署到云,并在任何地方运行。
    • 可扩展:您可以增加并自动分发容器副本。
    • 可堆叠:您可以垂直和即时堆叠服务。

    images 和 containers

    通过运行image启动容器,一个image是一个可执行的包,其中包括运行程序所需的所有内容和代码、运行时环境、依赖库、环境变量和配置文件。

    这里不说内部实现,从目的来看,启动一个容器的目的是为了运行一个程序,虚拟机则是安装配置一个应用程序,容器可以省去一些重复工作, 提高效率;容器运行, 在操作系统看来,就是一个独立进程,完成了沙盒应用的功能,而虚拟机则运行了一个“完整的GuestOS”,通过虚拟机管理程序(hypervisor )对主机进行虚拟访问。

    Docker 基本命令

    基本信息查看命令

    ## List Docker CLI commands
    docker
    docker container --help
    
    ## Display Docker version and info
    docker --version
    docker version
    docker info
    
    ## Execute Docker image
    docker run hello-world
    
    ## List Docker images
    docker image ls
    
    ## List Docker containers (running, all, all in quiet mode)
    docker container ls
    docker container ls --all
    docker container ls -aq
    

    简单Dockerfile

    Dockerfile例子

    # Use an official Python runtime as a parent image
    FROM python:2.7-slim
    
    # Set the working directory to /app
    WORKDIR /app
    
    # Copy the current directory contents into the container at /app
    ADD . /app
    
    # Install any needed packages specified in requirements.txt
    RUN pip install --trusted-host pypi.python.org -r requirements.txt
    
    # Make port 80 available to the world outside this container
    EXPOSE 80
    
    # Define environment variable
    ENV NAME World
    
    # Run app.py when the container launches
    CMD ["python", "app.py"]
    

    基于Dockerfile构建应用镜像

    docker build -t image-name . 
    

    查看基于Dockerfile构建的镜像

    docker image ls 
    

    运行容器

    docker run -d -p 4321:80 testimage
    

    待容器运行,会基于名为testimage的镜像后台运行一个容器,并且将容器内部的80端口映射到本机4321端口,如果容器80端口将可以访问,现在则可以访问宿主机ip:4321来访问容器内部的80端口。

    发布镜像

    可以将本地的镜像发布到dockerhub, 随处下载运行自己的镜像,
    首先你需要创建一个dockerhub账户.

    本地登录dockerhub

    docker login
    

    标记镜像

    docker tag image username/repository:tag
    

    例如

    docker tag testimage xieth/mytestimage:v1
    

    查看新标记的image

    # 以下两行命令功能相同
    docker image ls
    docker images
    

    现在可以从其他计算机运行刚才发布的镜像了。

    docker run -p 4321:80 xieth/mytestimage:v1
    

    基本命令整理

    docker build -t friendlyhello .  # Create image using this directory's Dockerfile
    docker run -p 4000:80 friendlyhello  # Run "friendlyname" mapping port 4000 to 80
    docker run -d -p 4000:80 friendlyhello         # Same thing, but in detached mode
    docker container ls                                # List all running containers
    docker container ls -a             # List all containers, even those not running
    docker container stop <hash>           # Gracefully stop the specified container
    docker container kill <hash>         # Force shutdown of the specified container
    docker container rm <hash>        # Remove specified container from this machine
    docker container rm $(docker container ls -a -q)         # Remove all containers
    docker image ls -a                             # List all images on this machine
    docker image rm <image id>            # Remove specified image from this machine
    docker image rm $(docker image ls -a -q)   # Remove all images from this machine
    docker login             # Log in this CLI session using your Docker credentials
    docker tag <image> username/repository:tag  # Tag <image> for upload to registry
    docker push username/repository:tag            # Upload tagged image to registry
    docker run username/repository:tag                   # Run image from a registry
    

    小结

    docker 的命令风格跟linux几乎一样,忘了直接docker --help 看下帮助,其实这些命令就现在看来几乎用不上,现在大家都在关注容器上层的集群编排,大部分不需要用手动敲命令来一个个实现, 而是通过标记语言yaml来实现容器的构建与运行。

  • 相关阅读:
    listview删除item
    标准listview加图标布局
    android事件消费机制,从外传到里面,里面具有优先选择权,如果里面的不需要,则传递给外面一层消费
    listview 按最新数据展示
    给listview添加数据,添加数据之后即刻显示出来,并把数据放在listview列表的最前面
    EditText限制输入长度和限定输入数字
    josn解析常见的几种方法
    bnu Robots on a grid
    hdu 1348 Wall
    hdu poj Oulipo
  • 原文地址:https://www.cnblogs.com/xth0331/p/9655469.html
Copyright © 2020-2023  润新知