关于docker:Docker使用简介一Docker的安装及常用命令

3次阅读

共计 8155 个字符,预计需要花费 21 分钟才能阅读完成。

一、概述

什么是容器
容器技术曾经成为应用程序封装和交付的核心技术
容器技术的外围有以下几个内核技术组成:
–Cgroups(Control Groups) 资源管理
–NameSpace 过程隔离
–SElinux 平安

因为在物理机上施行隔离, 启动一个容器, 能够像启动一个过程一样疾速

什么是 Docker
Docker 是残缺的一套容器管理系统
Docker 提供了一组命令, 让用户更加不便间接地应用容器技术, 而不须要过多关怀底层内核技术

Docker 长处
相比于传统的虚拟化技术, 容器更加简洁高效
传统虚拟机须要给每个 VM 装置操作系统
容器应用的共享公共库和程序

Docker 毛病
容器的隔离性没有虚拟化强
共用 Linux 内核, 安全性有先天缺点
SElinux 难以驾驭
监控容器和容器排错是挑战

二、Docker 的装置

装置前筹备
操作系统 Linux CentOS 7.5
敞开防火墙(不是必须, 防止引发一些防火墙导致的问题)

零碎版本

[root@docker01 ~]# cat /etc/redhat-release 
CentOS Linux release 7.5.1804 (Core)

Docker 的装置能够通过配置 yum 源或下载安装包装置以下通过 yum 源形式装置

1. 配置 yum 源 装置 docker
关上官网找到适配零碎的 yum 源 按提醒装置即可,yum 源站点在国外如果因为网络起因装置失败, 换成下载安装包装置
官网:https://docs.docker.com/engin…

$ sudo yum install -y yum-utils
$ sudo yum-config-manager --add-repo  https://download.docker.com/linux/centos/docker-ce.repo
$ sudo yum install docker-ce docker-ce-cli containerd.io
[root@docker01 ~]# systemctl restart docker        // 开启 docker 服务
[root@docker01 ~]# systemctl status  docker        // 查看 docker 服务状态
[root@docker01 ~]# systemctl enable docker         // 开启 docker 服务开机启动
[root@docker01 ~]# ifconfig                        // 有 docker0 阐明环境部署实现
docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:d5:18:74:94  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

三、Docker 的的常用命令

Docker 镜像常用命令 **

docker images 查看镜像列表
docker history 查看镜像制作历史
docker inspect 查看镜像底层信息
docker pull 下载镜像
docker push 上传镜像
docker rmi 删除本地镜像
docker save 镜像另存为 tar 包
docker load 应用 tar 包导入镜像
docker search 搜寻镜像
docker tag 批改镜像名称和标签

Docker 容器常用命令有哪些

docker run 运行容器
docker ps 查看容器列表
docker stop 敞开容器
docker start 启动容器
docker restart 重启容器
docker attach|exec 进入容器
docker inspect 查看容器底层信息
docker top 查看容器过程列表
docker rm 删除容器

3.1 镜像罕用指令练习

默认的镜像仓库为官网镜像仓库, 上传下载都会受到网络速度的限度, 为了方便管理镜像, 前期咱们须要在本地搭建镜像仓库

1)搜寻镜像

[root@docker01 ~]# docker search nginx               // 搜寻镜像 带 OK 的是官网镜像 更平安
NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
nginx                              Official build of Nginx.                        13768               [OK]                
jwilder/nginx-proxy                Automated Nginx reverse proxy for docker con…   1879                                    [OK]
richarvey/nginx-php-fpm            Container running Nginx + PHP-FPM capable of…   787                                     [OK]
linuxserver/nginx                  An Nginx container, brought to you by LinuxS…   128                                     
......

[root@docker01 ~]# docker search centos
NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
centos                             The official build of CentOS.                   6202                [OK]                
ansible/centos7-ansible            Ansible on Centos7                              132                                     [OK]
consol/centos-xfce-vnc             Centos container with "headless" VNC session…   121                                     [OK]
......

2)下载镜像

[root@docker01 ~]# docker pull nginx   
Using default tag: latest
latest: Pulling from library/nginx
d121f8d1c412: Pull complete 
ebd81fc8c071: Pull complete 
655316c160af: Pull complete 
d15953c0e0f8: Pull complete 
2ee525c5c3cc: Pull complete 
Digest: sha256:c628b67d21744fce822d22fdcc0389f6bd763daac23a6b77147d0712ea7102d0
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest

3)上传镜像 近程镜像仓库因为没有配置认证 上传被回绝

[root@docker01 ~]# docker push docker.io/nginx
The push refers to repository [docker.io/library/nginx]
908cf8238301: Layer already exists 
eabfa4cd2d12: Layer already exists 
......
errors:
denied: requested access to the resource is denied
unauthorized: authentication required

4)查看镜像列表

[root@docker01 ~]# docker images 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              7e4d58f0e5f3        2 weeks ago         133MB
busybox             latest              6858809bf669        2 weeks ago         1.23MB
centos              latest              0d120b6ccaa8        6 weeks ago         215MB

5)导出镜像

[root@docker01 ~]# docker save docker.io/nginx:latest -o nginx.tar
[root@docker01 ~]# ls
busybox.tar  Desktop  nginx.tar

6)删除镜像

[root@docker01 ~]# docker rmi docker.io/nginx
Untagged: nginx:latest
Untagged: nginx@sha256:c628b67d21744fce822d22fdcc0389f6bd763daac23a6b77147d0712ea7102d0
Deleted: sha256:7e4d58f0e5f3b60077e9a5d96b4be1b974b5a484f54f9393000a99f3b6816e3d
Deleted: sha256:eedfd37abc0b05520a719addf6675b372687fe9a2ed1746fa988335720d4376c
Deleted: sha256:4f052ddd517f6dc5b74d2f7d881838b8ec6a5e67ec7a1da8bbbe91e1e068ad3a
Deleted: sha256:5f78154d356577280e4ac0d9bf0d021d488828e57f953b011dcbadaecd539ce4
Deleted: sha256:db5783668220e16186080f3e9d69ad748aab8c72abb8e457f6fc45369461634b
Deleted: sha256:07cab433985205f29909739f511777a810f4a9aff486355b71308bb654cdc868

7)导入镜像

[root@docker01 ~]# docker load -i nginx.tar 
07cab4339852: Loading layer  72.49MB/72.49MB
f431d0917d41: Loading layer  64.31MB/64.31MB
60c688e8765e: Loading layer  3.072kB/3.072kB
eabfa4cd2d12: Loading layer  4.096kB/4.096kB
908cf8238301: Loading layer  3.584kB/3.584kB
Loaded image: nginx:latest

批量导入镜像

[root@docker01 ~]# for  i in *.tar; do docker load -i $i; done; 
be8b8b42328a: Loading layer   1.45MB/1.45MB
Loaded image: busybox:latest
Loaded image: nginx:latest
[root@docker01 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              7e4d58f0e5f3        12 days ago         133MB
busybox             latest              6858809bf669        2 weeks ago         1.23MBM

8)查看 centos 镜像历史(制作过程)

[root@docker01 ~]# docker history docker.io/centos
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
0d120b6ccaa8        6 weeks ago         /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B                  
<missing>           6 weeks ago         /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B                  
<missing>           6 weeks ago         /bin/sh -c #(nop) ADD file:538afc0c5c964ce0d…   215MB               

9)启动 nginx 的镜像

[root@docker01 ~]# docker run -d docker.io/nginx

10)删除镜像,启动容器时删除镜像会失败,先删除容器, 再删除镜像
格局:docker rmi 镜像名

[root@docker01 ~]# docker rmi nginx             // 删除镜像 报错:
Error response from daemon: conflict: unable to remove repository reference "nginx" (must force) - container 47e0f88ff31ee is using its referenced image 7e4d58f0e5f3

[root@docker01 ~]# docker stop 47e     // 进行容器
47e

[root@docker01 ~]# docker rm  47e      // 再删除容器
47e

[root@docker01 ~]# docker rmi  docker.io/nginx   // 在删除容器胜利

[root@docker01 ~]# docker run -d docker.io/nginx   // 镜像删除后 运行容器 docker 从新下载镜像 
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
d121f8d1c412: Pulling fs layer 
ebd81fc8c071: Pulling fs layer 
655316c160af: Download complete 
d15953c0e0f8: Waiting 
2ee525c5c3cc: Waiting 

11)批改镜像的名称和标签, 默认标签为 v2

[root@docker01 ~]# docker tag docker.io/centos:latest docker.io/centos:v2
[root@docker01 ~]# docker images 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             latest              6858809bf669        2 weeks ago         1.23MB
centos              latest              0d120b6ccaa8        6 weeks ago         215MB
centos              v2                  0d120b6ccaa8        6 weeks ago         215MB

12)查看镜像的底层信息

[root@docker01 ~]# docker inspect docker.io/centos
[
    {
        "Id": "sha256:0d120b6ccaa8c5e149176798b3501d4dd1885f961922497cd0abef155c869566",
        "RepoTags": [
            "centos:latest",
            "centos:v2"
        ],
......

3.2 容器罕用指令练习

1)查看容器列表

[root@docker01 ~]# docker ps                   // 查看前面运行容器
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
47edcb784521        nginx               "/docker-entrypoint.…"   55 seconds ago      Up 54 seconds       80/tcp              funny_faraday

[root@docker01 ~]# docker ps  -q             // 查看前面运行容器只显示 ID
47edcb784521
d1129361c6b1

[root@docker01 ~]# docker ps -a             // 查看所有容器包含没有启动的
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                      PORTS               NAMES
47edcb784521        nginx               "/docker-entrypoint.…"   About a minute ago   Up About a minute           80/tcp              funny_faraday
d1129361c6b1        centos              "/bin/bash"              57 minutes ago       Up 4 minutes                                    blissful_poitras
45065a8f9abe        centos              "/bin/bash"              23 hours ago         Exited (130) 23 hours ago                       relaxed_heisenberg

[root@docker01 ~]# docker ps -qa           // 只显示所有容器 ID
47edcb784521
d1129361c6b1
45065a8f9abe

2)启动 centos 镜像生成一个容器
docker run -it 是交互 -itd 是放入后盾运行  像相似 nginx 的服务启动后没有输出  前面加 /bin/bash 交互的命令可不必加默认 latest  /bin/bash 会主动补齐

[root@docker01 ~]# docker run -it docker.io/centos /bin/bash 
[root@d1129361c6b1 /]# yum repolist               // 看查默认的 yum 源  留神命令行后面变成了[root@d1129361c6b1 /] 阐明曾经在容器里了
Failed to set locale, defaulting to C.UTF-8
repo id                                      repo name
AppStream                                    CentOS-8 - AppStream
BaseOS                                       CentOS-8 - Base
extras                                       CentOS-8 - Extras

[root@d1129361c6b1 /]# yum -y install net-tools    // 装置软件

[root@d1129361c6b1 /]# exit        // 退出
exit

3)连贯容器 并放弃后盾运行 attach|exec

[root@docker01 ~]# docker ps    // 查看后盾运行的容器 发现容器也跟着退出了
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

形式 1 attach 按 ctrl+p+ q 退出

[root@docker01 ~]# docker start d1  // 开启容器
d1

[root@docker01 ~]# docker attach d1      // attach 进入过程, 退出会敞开  按 ctrl+p+ q 退出 能够保留程序
[root@d1129361c6b1 /]# read escape sequence 

[root@docker01 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
d1129361c6b1        centos              "/bin/bash"         About an hour ago   Up 48 seconds                           blissful_poitras

形式 2 exec
其中,-t 选项让 Docker 调配一个伪终端 (pseudo-tty) 并绑定到容器的规范输出上
-i 则让容器的规范输出放弃关上
在交互模式下, 用户能够通过所创立的终端来输出命令

[root@docker01 ~]# docker exec -it d1 /bin/bash
[root@d1129361c6b1 /]# exit
exit

[root@docker01 ~]# docker  ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
d1129361c6b1        centos              "/bin/bash"         About an hour ago   Up 10 seconds                           blissful_poitras

4)查看容器过程列表

[root@docker01 ~]# docker top d1 
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                21336               21318               0                   16:36               pts/0               00:00:00            /bin/bash

5)批改 nginx 的显示内容

[root@docker01 ~]# docker exec -it 47 /bin/bash
[root@47edcb784521:/# nginx -T /usr/share/nginx/html/
nginx: invalid option: "/usr/share/nginx/html/"   // 查找并显示后果

[root@47edcb784521:/# echo aaa >/usr/share/nginx/html/index.html   // 批改主页显示的内容
[root@47edcb784521:/# cat /usr/share/nginx/html/index.html 
aaa

5)过滤查看 mac 和 ip 地址

[root@docker01 ~]#  docker inspect -f '{{.NetworkSettings.MacAddress}}' 47
02:42:ac:11:00:03
[root@docker01 ~]#  docker inspect -f '{{.NetworkSettings.IPAddress}}' 47
172.17.0.3
[root@docker01 ~]# curl 172.17.0.3
aaa
正文完
 0