Docker容器(分享十五)

自从加入公司云计算部门,接触的新技术越来越多了,而且客户需求也原来越多样性,做我一名老IT,也必须跟上节奏,接下来一段时间我先尝试去了解docker基本功能,然后深入去挖掘。

一、什么是docker?

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

一个完整的Docker有以下几个部分组成:

  1. dockerClient客户端

  2. Docker Daemon守护进程
  3. Docker Image镜像
  4. DockerContainer容器

二、如何安装docker

docker支持在主流的操作系统平台上使用,包含Ubuntu、Centos、Windows以及MacOS系统等。当然在linux系统平台上是原生支持,使用体验是最好的。本分享中就以centos为例进行安装

docker支持centos6以及后面的版本

$yum install –y docker

三、镜像

1.获取镜像

docker pull NAME[:TAG]    比如:docker pull Ubuntu

2.查看镜像信息

[[email protected] ~]# docker images;
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/ubuntu    latest              00fd29ccc6f1        32 hours ago        110.5 MB
[[email protected] ~]# docker inspect 00fd29ccc6f1

[
    {
        "Id": "sha256:00fd29ccc6f167fa991580690a00e844664cb2381c74cd14d539e36ca014f043",
        "RepoTags": [
            "docker.io/ubuntu:latest"

3.搜索镜像(搜索远端仓库中共享的镜像,默认搜索docker HUB官方仓库中的镜像)

docker search mysql
INDEX       NAME                                                             DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/mysql                                                  MySQL is a widely used, open-source relati...   5412      [OK]      
docker.io   docker.io/mariadb                                                MariaDB is a community-developed fork of M...   1676      [OK]      
docker.io   docker.io/mysql/mysql-server                                     Optimized MySQL Server Docker images. Crea...   373                  [OK]
docker.io   docker.io/percona                                                Percona Server is a fork of the MySQL rela...   309       [OK]      
docker.io   docker.io/hypriot/rpi-mysql                                      RPi-compatible Docker Image with Mysql          74                  
docker.io   docker.io/zabbix/zabbix-server-mysql                             Zabbix Server with MySQL database support       66                   [OK]
docker.io   docker.io/centurylink/mysql                                      Image containing

4.删除镜像

docker rmi image(image可以为标签或者ID)

docker rmi Ubuntu:latest

dicker rmi –f ubuntu  强行删除,不建议这样操作

一般建议先删除依赖该镜像的所有容器,再来删除镜像。

docker ps -a查看本机上存在的容器。

5.创建镜像

基于已有的镜像的容器创建:

[[email protected] ~]# docker run -ti ubuntu /bin/bash

touch test

exit

docker commit –m “Added a new file” –a “docker Newbee” 8bd2274ada22  test  9ecdbadc

基于本地模板导入

cat ubuntu –14.04-x86_64-minimal.tar.gz |docker import – ubuntu:14.04

6.存出和载入镜像

存出镜像

[[email protected] ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/ubuntu    latest              00fd29ccc6f1        2 days ago          110.5 MB
docker.io/httpd     latest              7239615c0645        5 days ago          177.3 MB
docker.io/mysql     latest              7d83a47ab2d2        5 days ago

[[email protected] ~]# docker save -o ubuntu_test.tar ubuntu
[[email protected] ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/ubuntu    latest              00fd29ccc6f1        2 days ago          110.5 MB
docker.io/httpd     latest              7239615c0645        5 days ago          177.3 MB
docker.io/mysql     latest              7d83a47ab2d2        5 days ago          408.2 MB
[[email protected] ~]# ls
anaconda-ks.cfg  ubuntu_test.tar

载入镜像

docker load < ubuntu_test.tar

四、容器

简单地说,容器是镜像的一个运行实例,所不同的是,它带有额外的可写文件层。

创建容器:

新建容器:

[[email protected] ~]# docker create -it ubuntu:latest
743f20816538a52a686cf61d6a30db6fdb609c0da2d6a844e645b334b9bb3252

docker start

新建并启动容器

docker run ubuntu  /bin/echo “Hello world’

docker ps: 查看当前运行的容器

docker ps -a:查看所有容器,包括停止的

docker ps -l :查看最新创建的容器,只列出最后创建的。

docker ps -n=2:-n=x选项,会列出最后创建的x个容器。

容器名:docker start docker_run,或者ID:docker start 43e3fef2266c

–restart(自动重启):默认情况下容器是不重启的,–restart标志会检查容器的退出码来决定容器是否重启容器。

docker run --restart=always --name docker_restart -d centos /bin/sh -c "while true;do echo hello world; sleep;done":

--restart=always:不管容器的返回码是什么,都会重启容器。

--restart=on-failure:5:当容器的返回值是非0时才会重启容器。5是可选的重启次数

容器终止

docker stop [NAME]/[CONTAINER ID]:将容器退出。

docker kill [NAME]/[CONTAINER ID]:强制停止一个容器。

删除容器

docker rm [NAME]/[CONTAINER ID]

容器终止后,在需要的时候可以重新启动,确定不需要了,可以进行删除操作。
 
导入和导出容器

[[email protected] ~]# docker ps -l
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS                     PORTS               NAMES
dd7eef06ccba        ubuntu              "/bin/echo “Hello w"   12 minutes ago      Exited (0) 4 minutes ago                       silly_meitner
[[email protected] ~]# docker ps -l
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS                     PORTS               NAMES
dd7eef06ccba        ubuntu              "/bin/echo “Hello w"   12 minutes ago      Exited (0) 4 minutes ago                       silly_meitner
[[email protected] ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
dd7eef06ccba        ubuntu              "/bin/echo “Hello w"     14 minutes ago      Exited (0) 7 minutes ago                        silly_meitner
743f20816538        ubuntu:latest       "/bin/bash"              17 minutes ago      Created                                         nostalgic_stonebraker
8bd2274ada22        ubuntu              "/bin/bash"              31 minutes ago      Exited (0) 31 minutes ago                       sad_mccarthy
7786523990bf        ubuntu              "/bin/bash"              30 hours ago        Exited (0) 30 hours ago                         awesome_goldstine
175c8cf0149e        ubuntu              "echo ‘hello! I am he"   30 hours ago        Exited (0) 30 hours ago                         fervent_kowalevski
[[email protected] ~]# docker export dd7eef06ccba > test.tar

cat test.tar |docker import –test/ubuntu

五、仓库

docker 官方维护了一个公共仓库 http://hub.docker.com  ,大约15000多个镜像

六、数据管理

用户在使用docker的过程中,往往需要能查看容器内应用产生的数据,或者需要把容器内的数据进行相应的备份,甚至想把多个容器之间进行数据的共享,这必然涉及容器的数据管理操作。容器中管理数据主要有两种方式:

  • 数据卷(Data Volumes)

  • 数据卷容器(Data Volume Containers)
在容器内创建一个数据卷

docker run -it --rm --name web -v /src/webapp:/opt/webapp training/webapp python app.py #将宿主机中的/src/webapp目录挂载到容器中的/opt/webapp中

数据容器
  • 首先,创建一个数据卷容器dbdata,并在其中创建一个数据卷挂载到/dbdata

docker run --name jpzhu_centos -v /jpzhu_file --rm -it centos /bin/bash #创建一个数据容器并且挂载其中/jpzhu_file文件作为其它容器共享的数据卷

  • 接着,可以在其它的容器中使用–volumes-from 来挂载dbdata中的/jpzhu_file
利用数据卷容器迁移数据

备份

$ docker run --name worker -v ${pwd}:/backup --volumes-from dbdata -d centos tar cvf /backup/backup.tar /dbdata

恢复
docker run –volumes –from dbdata2 –v(pwd):/backup busybox tar xvf /backup/backuptar
 
 
时间: 2025-01-12 14:01:52

Docker容器(分享十五)的相关文章

Docker容器监控(十)--技术流ken

docker自带的监控命令 docker自带了三个监控命令即ps, top, stats ps docker ps 可以帮助我们很快的了解当前正在运行的容器 -a:会显示已经停掉的容器 [[email protected] ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2dc535903c8f weaveworks/scope:1.10.1 "/home/weave/entrypo…" 14 mi

Centos7.4—Docker容器安装配置与基本操作

Docker容器基本操作 目录第一部分 实验环境第二部分 安装配置Docker软件第三部分 Docker镜像操作第四部分 Docker容器操作第五部分 制作镜像第六部分 数据卷管理第七部分 网络通信第八部分 构建nginx镜像 第一部分 实验环境Linux服务器一台系统:CentOS 7.4IP地址:192.168.80.10 注意:需要该服务器能上公网 第二部分 安装配置docker软件一:配置yum源,加入docker源[[email protected] ~]# vi /etc/yum.r

【云快讯】之二十五《微软将在Windows Server中支持“Docker”容器》

2015-04-09 张晓东 东方云洞察 点击上面的链接文字,可以快速关注"东方云洞察"公众号 Windows Server Containers will be able to run applications specifically built for Windows Server and .Net 微软已经开发了一种容器技术,可以在Windows Server操作系统上运行,是希望能够在微软的windows和.Net体系上复制基于Docker的容器在Linux上的成功. &qu

Ubuntu下用docker安装redis镜像和使用redis容器分享

Ubuntu下用docker安装redis镜像和使用redis容器分享 1. 安装Ubuntu 2. 用Putty登录Ubuntu Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-40-generic x86_64) * Documentation:  https://help.ubuntu.com/ System information as of Wed Dec 31 06:41:16 UTC 2014 System load:  0.01  

Docker容器学习与分享02

1.docker容器的创建 首先运行一个centos容器,感受一下Docker容器的便捷 首先先看一下镜像仓库 发现仓库里没有镜像,也就是没有创建容器的模板,这时考虑从REPOSITORY中拉取镜像(Docker分享01中提到REPOSITORY是用来存放镜像的仓库,而REPOSITORY仓库分为公有仓库(Docker Hub)和私有仓库,公有仓库即所有人都可以分享使用,而私有仓库是个人使用). 在公有仓库中搜索centos镜像 这时会列出所有的镜像,优先考虑官方镜像,然后将它拉取到本地. 这样

Docker 容器十诫

[编者按]本文作者为 Rafael Benevides,主要介绍使用 Docker 容器时应该注意的十个陷阱. Docker 容器十诫 当你刚开始使用容器时,会发现容器能解决许多问题,而且好处很多: 首先:容器是不可变的 —— 操作系统.库版本.配置.文件夹以及应用全都包裹在容器内.你可以确保,在 QA 阶段测试的一张图片,肯定会在生产环境中出现,并且行为保持一致. 其次:容器是轻量级的 —— 容器的内存占用很小.容器只会给主进程分配内存,因此无需十几万个 MB 的内存空间. 最后:容器速度很快

Docker系列-第五篇Docker容器数据卷

1.是什么 在生产环境中使用 Docker,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,这必然涉及容器的数据管理操作 . 容器中的管理数据主要有两种方式 : 数据卷 ( Data Volumes ) : 容器内数据直接映射到本地主机环境: 数据卷容器( Data Volume Containers ) : 使用特定容器维护数据卷. 一句话:有点类似我们Redis里面的rdb和aof文件 将运用与运行的环境打包形成容器运行 ,运行可以伴随着容器,但是我们对数据的要求希望是持久化的

docker 源码分析 五(基于1.8.2版本),Docker容器的创建

前面讲到了docker容器得镜像,镜像其实是docker容器的静态部分,而docker容器则是docker镜像的动态部分,即启动了一个进程来运行,本篇最要来分析一下怎样创建并运行一个容器. 创建一个容器在客户端实现是在api/client/create.go,其中得CmdCreate()方法,这个函数的作用是通过一个给定的image来启动一个container:其中的createContainer()函数是最主要的实现部分: //create the container serverResp,

Docker 容器空间大小设置 - 十

一.容器启动 默认存储大小: 1.一种在启动项 docker.service 中配置. 2.在启动项配置调用的 docker-storage 配置文件中配置: 二.Docker 容器默认启动文件: /usr/lib/systemd/system/docker.service # cat /usr/lib/systemd/system/docker.service [Unit] Description=Docker Application Container Engine Documentatio