美文网首页
docker 容器技术入门

docker 容器技术入门

作者: 邂逅_a754 | 来源:发表于2020-11-09 16:24 被阅读0次

    Docker容器技术入门(一)

    1.Docker技术介绍

    DOCKER是一个基于LXC技术之上构建的container容器引擎,通过内核虚拟化技术(namespace及cgroups)来提供容器的资源隔离与安全保障,KVM是通过硬件实现的虚拟化技术,它是通过系统来实现资源隔离与安全保障,占用系统资源比较小

    官方网站:https://www.docker.com/

    Docker组成:

      客户端与服务端

    Docker组件:

      镜像

      容器

      仓库

    2.Docker与Openstack对比

    3.Docker 的优点

    1)简化程序:

    Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,在Docker容器的处理下,只需要数秒就能完成。

    2)多样性:Docker 帮你打包你的纠结!比如 Docker 镜像;Docker 镜像中包含了运行环境和配置,所以 Docker 可以简化部署多种应用实例工作。比如 Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个镜像部署。

    3)节省开支:云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思维定势。Docker 与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。

    4.Docker的应用场景

    1)需要简化配置(测试环境与生产环境不同)

    2)代码管理(代码上传与下载)

    3)提升开发效率(开发环境配置的安装和openstack kvm相同)

    4)应用隔离

    5)服务器整合

    6)调试

    7)多终端、多租户

    8)需要快速部署与环境一致性

    5.Docker安装与配置

    安装Docker服务

    root@centos7 ~]# yum install docker -y

    [root@centos7 ~]# systemctl start docker

    下载镜像文件

    [root@centos7 ~]# docker pull centos:latestTrying to pull repository docker.io/library/centos ... centos7: Pulling from docker.io/library/centos93857f76ae30: Pull complete Digest: sha256:4eda692c08e0a065ae91d74e82fff4af3da307b4341ad61fa61771cc4659af60[root@centos7 ~]# docker imagesREPOSITORY        TAG      IMAGE ID     CREATED     SIZEdocker.io/centos  centos7  a8493f5f50ff 3 days ago  192.5 MB

    删除镜像

    [root@centos7 ~]# docker rmi a8493f5f50ff    ##容器ID

    6.Docker容器创建与管理

    1)创建容器

    方法一:

    [root@centos7 ~]# docker run centos /bin/echo "nihao"  

    ##创建容器nihao

    [root@centos7 ~]# docker ps -a  

    ##查看所有容器

    CONTAINER ID  IMAGE  COMMAND   CREATED    STATUS   PORTS    NAMES3c113f9a4f1b centos "/bin/echo nihao" 43 seconds ago Exited (0) 41 seconds ago  boring_liskov

    这里没有指定容器名称,自动命名,状态是自动退出

    方法二:创建一个自定义名称的容器

    [root@centos7 ~]# docker run --name mgg -t -i centos /bin/bash

    名称  分配伪终端  -i 处于打开状态

    [root@2db7f1389dbd /]# ps -ef

    UID   PID  PPID  C STIME TTY  TIME CMD

    root   1    0  0 22:46 ?   00:00:00 /bin/bash

    root   13   1  0 22:49 ?  00:00:00 ps -ef

    [root@centos7 ~]# docker ps

    CONTAINER ID  IMAGE   COMMAND   CREATED   STATUS  PORTS    NAMES

    2db7f1389dbd  centos  "/bin/bash"  4 minutes ago   Up 4 minutes   mgg

    docker ps -a是显示所有容器包括没有运行的(同virsh list --all)

    2)进入、退出、启动容器

    [root@2db7f1389dbd /]# exit  

    ##退出容器exit

    [root@centos7 ~]# docker start 2db7f1389dbd  

    ##启动容器

    2db7f1389dbd

    [root@centos7 ~]# docker attach 2db7f1389dbd  

    ##进入容器(必须是启动状态下)

    [root@2db7f1389dbd /]# hostname2db7f1389dbd

    这种进入方式,退出后容器就进入Down状态,如下

    [root@2db7f1389dbd /]# exitexit

    [root@centos7 ~]# docker ps

    CONTAINER ID   IMAGE  COMMAND   CREATED    STATUS    PORTS   NAMES

    3)使用nsenter命令进入容器

    [root@centos7 ~]# nsenter --help

    Usage:

    nsenter [options] <program> [<argument>...]

    Run a program with namespaces of other processes.

    Options:

    -t, --target <pid>     target process to get namespaces from

    -m, --mount[=<file>]   enter mount namespace

    -u, --uts[=<file>]     enter UTS namespace (hostname etc)

    -i, --ipc[=<file>]     enter System V IPC namespace

    -n, --net[=<file>]     enter network namespace

    -p, --pid[=<file>]     enter pid namespace

    -U, --user[=<file>]    enter user namespace

    -S, --setuid <uid>     set uid in entered namespace

    -G, --setgid <gid>     set gid in entered namespace

        --preserve-credentials do not touch uids or gids

    -r, --root[=<dir>]     set the root directory

    -w, --wd[=<dir>]       set the working directory

    -F, --no-fork          do not fork before exec'ing <program>

    -Z, --follow-context   set SELinux context according to --target PID

    -h, --help     display this help and exit

    -V, --version  output version information and exit

    For more details see nsenter(1).

    获取容器的PID

    [root@centos7 ~]# docker inspect --format "{{.State.Pid}}" 2db7f1389dbd

    4580

    [root@centos7 ~]# nsenter -t 4580 -u -i -n -p

    [root@2db7f1389dbd ~]# hostname

    2db7f1389dbd

    [root@2db7f1389dbd ~]# exit

    logout

    [root@centos7 ~]# docker ps

    CONTAINER ID  IMAGE    COMMAND    CREATED    STATUS   PORTS  NAMES

    2db7f1389dbd  centos    "/bin/bash" 22 minutes ago   Up 7 minutes  mgg

    4)删除容器

    [root@centos7 ~]# docker ps -a

    CONTAINER ID   IMAGE  COMMAND   CREATED     STATUS    PORTS    NAMES

    2db7f1389dbd  centos  "/bin/bash"  31 minutes ago  Up 16 minutes  mgg

    3c113f9a4f1b  centos  "/bin/echo nihao" 38 minutes ago Exited (0) 38 minutes ago boring_liskov

    [root@centos7 ~]# docker rm 3c113f9a4f1b  ##接名称也可以,删除一个停止的容器

    3c113f9a4f1b

    [root@centos7 ~]# docker rm -f   3c113f9a4f1b ##删除一个正在运行的容器

    [root@centos7 ~]# docker ps -a          

    CONTAINER ID  IMAGE   COMMAND    CREATED    STATUS    PORTS   NAMES

    2db7f1389dbd    centos    "/bin/bash"    31 minutes ago   Up 16 minutes  mgg

    [root@centos7 ~]# docker run --rm centos /bin/echo "hello"   ##创建时自动删除,用于测试

    [root@centos7 ~]#docker --kill $(docker ps -a -q)            ##删除正在运行的容器

    相关文章

      网友评论

          本文标题:docker 容器技术入门

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