本博不再更新,文章迁移至本人个人网站,点击后方网址直接跳转www.kendd.cn

文章将会同步更新至今日头条,点击后方链接即可直接跳转。 https://www.toutiao.com/c/user/5882683285/#mid=1626981393635339

Docker介绍及常用操作演示(一)--技术流ken

 

Docker简介

 

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

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

  1. dockerClient客户端
  2. Docker Daemon守护进程
  3. Docker Image镜像
  4. DockerContainer容器                                                                                                         

容器:

存储、运输工具

实现对容器内部的物品实现包含(实现了一个相对隔离的环境)

容器:模拟(虚拟)出一个相对隔离的空间

 

镜像:

用来创建容器的模版,放在镜像仓库中,例如nginx,redis,httpd等

 

Docker与Kvm的对比

 

kvm:

1. 虚拟机

2. 使用复杂

3. 启动过程相对慢(分钟)

4. 模版文件较大

5. 和物理完全隔离

6. 模拟的是一个完整系统,可以登录并实现管理

 

docker:

1. 直接虚拟出来一个用户空间

2. 使用简单

3. 启动非常块(秒级)

4. 模版文件很小

5. 在一定程度上和物理机隔离

6. 仅仅是模拟一部分用户空间,不方便管理

 

Docker使用理由

 

1. 快速部署服务

2. 多租户

3. 实现隔离

4. 让一个主机运行多个容器

5. 提高开发效率

6. 简化配置过程

7. 实现软件的跨平台

 

Docker镜像加速配置

 

第一步:打开阿里云网站

 https://www.aliyun.com/?utm_content=se_1000301910

 

第二步:进行阿里云注册

 

第三步:点击控制台

 

 

第四步:点击产品与服务>镜像与服务

 

第五步:点击镜像加速器,记住自己的加速器地址

 

Docker的安装与配置

 

安装docker需要配置网络yum源,centos7自带的版本太低了

 

第一步:下载阿里云的docker安装包

在yum仓库的目录之下

[root@localhost yum.repos.d]# wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

 

还需要使用到extra和epel源

[extra]
name=centos extra
enabled=1
gpgcheck=0
baseurl=https://mirrors.aliyun.com/centos/7/extras/x86_64/
[epel]
name=epel
enabled=1
gpgcheck=0
baseurl=https://mirrors.aliyun.com/epel/7Server/x86_64/

 

第二步:使用yum即可进行安装

docker-ce是社区版,是免费的

docker-ee是企业版,是收费的

这里我们下载社区版的

[root@ken ~]# yum install docker-ce -y

 

 第三步:添加加速器地址

把刚才注册得到的镜像加速地址如下步骤填写进去

[root@ken ~]# mkdir /etc/docker
[root@ken ~]# cat /etc/docker/daemon.json
{
  "registry-mirrors": ["https://XXX.mirror.aliyuncs.com"]
}

 

第四步:重启docker

[root@ken ~]# systemctl restart docker

 

Docker有关镜像的操作命令详解

 

第一步:获取镜像的使用帮助

[root@ken ~]# docker image --help

Usage:    docker image COMMAND

Manage images

 

第二步:docker镜像的使用命令详解

  build       从docker文件里面创建镜像
  history     显示一个镜像的历史
  import      从tarball导入内容以创建文件系统映像
  inspect     显示一个一个或多个镜像的详细信息
  load        加载一个镜像从tar压缩包或者标准输入
  ls          列出镜像
  prune       移除没有被使用的镜像
  pull        从注册处拉取一个镜像或者镜像库
  push        把一个镜像或者镜像库推送至注册处
  rm          移除一个或多个镜像
  save        保存一个或者多个镜像到tar压缩包,默认情况下流式传输到
  tag         创建一个引用SOURCE_IMAGE的标记TARGET_IMAGE

 

Docker镜像的操作命令演示

 

一. 查看注册表中是否有nginx镜像

[root@ken ~]# docker search nginx
NAME                                                   DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
nginx                                                  Official build of Nginx.                        10326               [OK]                
jwilder/nginx-proxy                                    Automated Nginx reverse proxy for docker con??  1471                                    [OK]
richarvey/nginx-php-fpm                                Container running Nginx + PHP-FPM capable of??  650                                     [OK]
jrcs/letsencrypt-nginx-proxy-companion                 LetsEncrypt container to use with nginx as p??  441                                     [OK]
kong                                                   Open-source Microservice & API Management la??  249                 [OK]                
webdevops/php-nginx                                    Nginx with PHP-FPM                              117                                     [OK]
kitematic/hello-world-nginx                            A light-weight nginx container that demonstr??  112                                     
...

 

二.下载nginx镜像

[root@ken ~]# docker image pull nginx

 

三:查看本地镜像

[root@ken ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              e81eb098537d        10 days ago         109MB

 

四:导入镜像

这里我准备了一个redis的镜像压缩包

这样就获取到了redis的镜像

压缩包不需要解压

[root@ken ~]# docker image load < redis_img.tar.gz 
d626a8ad97a1: Loading layer [==================================================>]  58.46MB/58.46MB
fd0ff4158c63: Loading layer [==================================================>]  338.4kB/338.4kB
f1e69ab74fb6: Loading layer [==================================================>]  3.034MB/3.034MB
5935063a73de: Loading layer [==================================================>]  24.83MB/24.83MB
72ebea29957d: Loading layer [==================================================>]  1.536kB/1.536kB
56631ad86187: Loading layer [==================================================>]  3.584kB/3.584kB
Loaded image: redis:latest
[root@ken ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              e81eb098537d        10 days ago         109MB
redis               latest              55cb7014c24f        5 months ago        83.4MB
[root@ken ~]# 

 

五:镜像导出

写成压缩包的形式

[root@ken ~]# docker image save  nginx > /tmp/nginx.tar.gz
[root@ken ~]# ls /tmp/nginx.tar.gz
/tmp/nginx.tar.gz

 

六:显示nginx镜像的详细信息

[root@ken ~]# docker inspect nginx
[
    {
        "Id": "sha256:e81eb098537d6c4a75438eacc6a2ed94af74ca168076f719f3a0558bd24d646a",
        "RepoTags": [
            "nginx:latest"
        ],
        "RepoDigests": [
            "nginx@sha256:31b8e90a349d1fce7621f5a5a08e4fc519b634f7d3feb09d53fac9b12aa4d991"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2018-11-16T13:32:10.147294787Z",
        "Container": "d4fa15093ad8ad3df60d7403c1752a379503686e32a76b70771b3ea268ec5d66",
        "ContainerConfig": {
            "Hostname": "d4fa15093ad8",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
...

 

七:删除nginx的镜像

[root@ken ~]# docker image rm nginx
Untagged: nginx:latest
Untagged: nginx@sha256:31b8e90a349d1fce7621f5a5a08e4fc519b634f7d3feb09d53fac9b12aa4d991
Deleted: sha256:e81eb098537d6c4a75438eacc6a2ed94af74ca168076f719f3a0558bd24d646a
Deleted: sha256:7055505a92c39c6f943403d54a1cda020bfeb523b55d9d78bfe1dad0dd32bb2d
Deleted: sha256:378a8fcc106dc4d3a9f2dc0b642b164e25de3aab98a829e72b2d8c0cf0bad8ee
Deleted: sha256:ef68f6734aa485edf13a8509fe60e4272428deaf63f446a441b79d47fc5d17d3
[root@ken ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
redis               latest              55cb7014c24f        5 months ago        83.4MB

 

Docker有关容器的操作命令详解

 

第一步:获取容器的命令的使用帮助

[root@ken ~]# docker container --help

Usage:    docker container COMMAND

Manage containers

 

第二步:docker容器的使用命令详解

  attach      将本地标准输入,输出和错误流附加到正在运行的容器
  commit      根据容器的更改创建新镜像
  cp          在容器和本地文件系统之间复制文件/文件夹
  create      创建一个新的容器
  diff        检查容器文件系统上的文件或目录的更改
  exec        在正在运行的容器中运行命令
  export      将容器的文件系统导出为tar存档
  inspect     显示一个或多个容器的详细信息
  kill        杀死一个或多个正在运行的容器
  logs        获取容器的日志
  ls          列出容器
  pause       暂停一个或多个容器中的所有进程
  port        列出端口映射或容器的特定映射
  prune       删除所有已停止的容器
  rename      重命名容器
  restart     重启一个或多个容器
  rm          删除一个或多个容器
  run         在新容器中运行命令
  start       启动一个或多个已停止的容器
  stats       显示容器资源使用情况统计信息的实时流
  stop        停止一个或多个正在运行的容器
  top         显示容器的运行进程
  unpause     取消暂停一个或多个容器中的所有进程
  update      更新一个或多个容器的配置
  wait        等待,直到一个或多个容器停止,然后打印退出代码

 

Docker容器的操作命令演示

 

一.启动redis容器

--name:指定容器名字

-d:表示后台运行

[root@ken ~]# docker container  run --name redis1 -d redis
4cd31fa09d483ed87c8fe390a49c13fdba0652df33e2ae1cb44a1f8426578afd

 

二.查看容器

使用ls

[root@ken ~]# docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
4cd31fa09d48        redis               "docker-entrypoint.s??   39 seconds ago      Up 38 seconds       6379/tcp            redis1

 

三.查看所有的容器

ps -a: 列出所有的容器包括运行和停止的

ps: 仅仅列出正在运行的

[root@ken ~]# docker container ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                     PORTS               NAMES
4cd31fa09d48        redis               "docker-entrypoint.s??   About a minute ago   Up About a minute          6379/tcp            redis1
054bc8b8aab7        redis               "docker-entrypoint.s??   2 minutes ago        Exited (0) 2 minutes ago                       confident_goldstine

 

四.查看容器的详细信息

inspect后面加上容器名字即可获取有关容器的详细信息

[root@ken ~]# docker container  inspect redis1
[
    {
        "Id": "4cd31fa09d483ed87c8fe390a49c13fdba0652df33e2ae1cb44a1f8426578afd",
        "Created": "2018-11-26T20:22:23.099937767Z",
        "Path": "docker-entrypoint.sh",
        "Args": [
            "redis-server"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
...

 

五.停止容器

使用stop

[root@ken ~]# docker container stop redis1
redis1
[root@ken ~]# docker container ps 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

 

六.启动容器

使用start

[root@ken ~]# docker container start redis1
redis1
[root@ken ~]# docker container ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
4cd31fa09d48        redis               "docker-entrypoint.s??   8 minutes ago       Up 1 second         6379/tcp            redis1

 

七.登录容器

第一种方法:

exec -it   容器名 /bin/sh

-i: 表示启动为交互模式

-t:表示分配一个终端

登录进去之后发现我们可以执行有挂redis的命令了

[root@ken ~]# docker container exec -i -t redis1 /bin/sh 
# 
# 
# redis-cli
127.0.0.1:6379> set ken 520
OK
127.0.0.1:6379> get ken
"520"

退出之后容器没有停止

[root@ken ~]# docker container ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
4cd31fa09d48        redis               "docker-entrypoint.s??   13 minutes ago      Up 4 minutes        6379/tcp            redis1

 

第二种方法:

attach:会导致当退出的时候,自动停止容器

不建议使用

 

[root@ken ~]# docker container attach redis1




^C1:signal-handler (1543264604) Received SIGINT scheduling shutdown...
1:M 26 Nov 20:36:44.315 # User requested shutdown...
1:M 26 Nov 20:36:44.315 * Saving the final RDB snapshot before exiting.
1:M 26 Nov 20:36:44.327 * DB saved on disk
1:M 26 Nov 20:36:44.327 # Redis is now ready to exit, bye bye...
[root@ken ~]# docker container ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

 

 

第三种方法:

基于nsenter进入

第一步:启动容器

[root@ken ~]# docker container start redis1
redis1
[root@ken ~]# docker container ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
4cd31fa09d48        redis               "docker-entrypoint.s??   16 minutes ago      Up 6 seconds        6379/tcp            redis1

 

第二步:获取容器的pid

[root@ken ~]# docker container inspect -f '{{.State.Pid}}' redis1
6036

 

第三步:登录容器

-t: 从中获取名称空间的目标进程

-u: 输入UTS名称空间(主机名等)

-i: 进入System V IPC命名空间

-n: 输入网络命名空间

-p:输入pid命名空间

[root@ken ~]#  nsenter -t 6036 -u -i -n -p
[root@4cd31fa09d48 ~]# ps
  PID TTY          TIME CMD
 2595 pts/0    00:00:01 bash
 6216 pts/0    00:00:00 nsenter
 6217 pts/0    00:00:00 bash
 6250 pts/0    00:00:00 ps

退出时不会停止容器

[root@4cd31fa09d48 ~]# exit
logout
[root@ken ~]# docker container ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
4cd31fa09d48        redis               "docker-entrypoint.s??   23 minutes ago      Up 6 minutes        6379/tcp            redis1

 

八.删除容器

第一步:需要停止容器

[root@ken ~]# docker container stop redis1
redis1
[root@ken ~]# docker container ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

 

第二步:删掉容器

[root@ken ~]# docker container rm redis1
redis1
[root@ken ~]# docker container ls
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

  

补充:一次性删除全部已经退出的容器

[root@ken1 ~]# docker rm  $(docker ps -aq)

 

posted @ 2018-11-26 20:47  技术流ken  阅读(1972)  评论(1编辑  收藏  举报