Docker的安装和基本管理命令(对镜像、容器的简单操作)

一、docker的安装

安装依赖环境

[root@localhost ~]# yum -y install yum-utils device-mapper-persistent-data lvm2

依赖包说明

yum-utils 是yum配置管理工具,提供yum-config-manager这条指令
device mapper 存储驱动程序需要device-mapper-persistent-data和 lvm2,它是内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构,简单讲是为了让docker-ce能够平稳运行

获取阿里云镜像源,这里就用到了yum-config-manager工具,从官网添加镜像源

[root@localhost ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

查看yum仓库里的源

[root@server1 docker]# cd /etc/yum.repos.d/
[root@server1 yum.repos.d]# ll
总用量 36
drwxr-xr-x. 2 root root    6 1125 14:13 backup
-rw-r--r--. 1 root root 1664 830 2017 CentOS-Base.repo   
#基础的yum源,没有的话,安装docker引擎时会报错
-rw-r--r--. 1 root root 1309 830 2017 CentOS-CR.repo
-rw-r--r--. 1 root root  649 830 2017 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root  314 830 2017 CentOS-fasttrack.repo
-rw-r--r--. 1 root root  630 830 2017 CentOS-Media.repo
-rw-r--r--. 1 root root 1331 830 2017 CentOS-Sources.repo
-rw-r--r--. 1 root root 3830 830 2017 CentOS-Vault.repo
-rw-r--r--. 1 root root 2640 316 2020 docker-ce.repo  #阿里的docker引擎镜像源
-rw-r--r--. 1 root root  228 810 21:36 local.repo

安装docker-ce

#安装前最好yum clean all ,yum makecache
[root@server1 yum.repos.d]# yum -y install docker-ce

关闭防火墙和核心防护

[root@server1 ~]# systemctl stop firewalld
[root@server1 ~]# setenforce 0
#临时的

开启docker服务

[root@server1 ~]# systemctl start docker.service 
[root@server1 ~]# systemctl enable docker.service 

二、镜像加速

在利用阿里的源拉取镜像之前,需要做镜像加速,否则拉取镜像会很慢。
每个人都能通过注册阿里云官方账号,获取镜像加速。
获取方法:
登录阿里云,并注册登录自己的账号,点击控制台

在这里插入图片描述
查看产品与服务

在这里插入图片描述
进入容器镜像服务,找到自己的加速地址,导入镜像加速,root用户登录就不需要sudo执行

在这里插入图片描述

[root@server1 ~]# mkdir -p /etc/docker
[root@server1 ~]# tee /etc/docker/daemon.json <<-'EOF'
> {
>   "registry-mirrors": ["https://******.mirror.aliyuncs.com"]
> }
> EOF

重启服务

[root@server1 ~]# systemctl daemon-reload #重载进程
[root@server1 ~]# systemctl restart docker

做网络加速,开启路由转发

[root@server1 ~]# vi /etc/sysctl.conf 
[root@server1 ~]# sysctl -p
net.ipv4.ip_forward = 1
[root@server1 ~]# systemctl restart docker

三、基本管理命令——镜像

3.1 查看docker版本信息

[root@server1 docker]# docker version
Client: Docker Engine - Community
 Version:           19.03.13
 API version:       1.40
 Go version:        go1.13.15  #docker是go语言开发的
 Git commit:        4484c46d9d
 Built:             Wed Sep 16 17:03:45 2020
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.13
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       4484c46d9d
  Built:            Wed Sep 16 17:02:21 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.3.7
  GitCommit:        8fba4e9a7d01810a393d5d25a3621dc101981175
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

3.2 搜索镜像

docker search 镜像名
[root@server1 ~]# docker search nginx  #搜索的是阿里公有仓库中的镜像,按热度排序
NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
nginx                              Official build of Nginx.                        14063               [OK]                
jwilder/nginx-proxy                Automated Nginx reverse proxy for docker con…   1912                                    [OK]
richarvey/nginx-php-fpm            Container running Nginx + PHP-FPM capable of…   795                                     [OK]
linuxserver/nginx                  An Nginx container, brought to you by LinuxS…   131                                     
jc21/nginx-proxy-manager           Docker container for managing Nginx proxy ho…   115                                     
tiangolo/nginx-rtmp                Docker image with Nginx using the nginx-rtmp…   105                                     [OK]
bitnami/nginx                      Bitnami nginx Docker 

3.3 下载拉取镜像

docker pull 镜像名
[root@server1 docker]# docker pull nginx
Using default tag: latest  #默认标签名为latest
latest: Pulling from library/nginx
852e50cd189d: Pull complete   #是分布式的存储,下载时也是分层的获取镜像
571d7e852307: Pull complete 
addb10abd9cb: Pull complete 
d20aa7ccdb77: Pull complete 
8b03f1e11359: Pull complete 
Digest: sha256:6b1daa9462046581ac15be20277a7c75476283f969cb3a61c8725ec38d3b01c3
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest

3.4 查看本地镜像

[root@server1 docker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              bc9a0695f571        6 hours ago         133MB
tomcat              latest              e0bd8b34b4ea        6 days ago          649MB

3.5 获取镜像的详细信息

docker inspect 镜像ID
[root@server1 docker]# docker inspect bc9a0695f571 #镜像ID
[
    {
        "Id": "sha256:bc9a0695f5712dcaaa09a5adc415a3936ccba13fc2587dfd76b1b8aeea3f221c",
        "RepoTags": [
            "nginx:latest"
        ],
        "RepoDigests": [
            "nginx@sha256:6b1daa9462046581ac15be20277a7c75476283f969cb3a61c8725ec38d3b01c3"
        ],
省略部分信息

3.6 给镜像打标签,相当于起别名

docker tag   原镜像:标签   新镜像:标签
[root@server1 docker]# docker tag nginx:latest nginx:web
#再查看镜像
[root@server1 docker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              bc9a0695f571        7 hours ago         133MB
nginx               web                 bc9a0695f571        7 hours ago         133MB
#生成新的镜像信息,但镜像ID没变,是同一个镜像,只是标签不同
tomcat              latest              e0bd8b34b4ea        6 days ago          649MB

3.7 删除镜像

  • 一个镜像有多个标签时,无法用镜像id删除镜像,必须先删除标签到只剩一个,再删除镜像
  • 如果已经生成容器,必须先删除容器,才能删除镜像
docker rmi 镜像ID
[root@server1 docker]# docker rmi bc9a0695f571
Error response from daemon: conflict: unable to delete bc9a0695f571 (must be forced) - image is referenced in multiple repositories
[root@server1 docker]# docker rmi nginx:web  #删除标签
Untagged: nginx:web
[root@server1 docker]# docker rmi bc9a0695f571
Untagged: nginx:latest
Untagged: nginx@sha256:6b1daa9462046581ac15be20277a7c75476283f969cb3a61c8725ec38d3b01c3
Deleted: sha256:bc9a0695f5712dcaaa09a5adc415a3936ccba13fc2587dfd76b1b8aeea3f221c
Deleted: sha256:a6862ade3b91fdde2aa8a3d77fdcc95b1eb6c606be079c11b7f97f249d0e731d
Deleted: sha256:32bcbe3740b68d0625744e774b404140366c0c4a2b2eadf32280d66ba001b4fb
Deleted: sha256:2dc5e43f496e41a18c016904b6665454a53be22eb4dcc1b468d864b4e2d1f311
Deleted: sha256:5fe6a7c579cd9fbcfa604810974c4c0c16893f4c40bc801545607ebd0accea74
Deleted: sha256:f5600c6330da7bb112776ba067a32a9c20842d6ecc8ee3289f1a713b644092f8

3.8 存出镜像到本地

存出的是已经拉取的镜像

[root@server1 docker]# docker save -o /opt/tomcat tomcat:latest  #将Tomcat镜像存到本地的/opt目录下命名为Tomcat

3.9 载入镜像

可以通过存到本地的镜像包,进行镜像载入到docker
删除tomcat镜像,利用本地载入镜像。

[root@server1 docker]# docker rmi e0bd8b34b4ea
[root@server1 docker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
[root@server1 docker]# docker load < /opt/tomcat
114ca5b7280f: Loading layer  119.2MB/119.2MB
f3be340a54b9: Loading layer   17.1MB/17.1MB
475b4eb79695: Loading layer  17.85MB/17.85MB
712264374d24: Loading layer    150MB/150MB
4b9227ba273c: Loading layer  11.52MB/11.52MB
39341dafb261: Loading layer  3.584kB/3.584kB
94982bbe98d5: Loading layer  324.2MB/324.2MB
438ec47051c4: Loading layer   2.56kB/2.56kB
a84354b89db3: Loading layer   20.8MB/20.8MB
3be17d77a93a: Loading layer  2.048kB/2.048kB
Loaded image: tomcat:latest
[root@server1 docker]# docker images  #载入成功
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
tomcat              latest              e0bd8b34b4ea        6 days ago          649MB

3.10 上传镜像到仓库(公有)

改标签 
docker tag nginx:latest abner/nginx:web   //用户名/仓库名:镜像名

登陆
docker login
Username: docker
password:
Email: xxx@xxx.com
上传
docker push abner/nginx:web

四、基本管理命令——容器

4.1 制作容器

有了镜像之后,就可以制作容器运行镜像

docker create [选项] 镜像运行的程序  /bin/bash
[root@server1 docker]# docker create -it tomcat:latest /bin/bash
5d5a89b11c563b81970fff5d71193f57ea771db9dfa1ffb6b8344115bee044c4

-i 让容器的标准输入保持打开
-t 让Docker分配一个伪终端

4.2 查看容器状态(ID)

docker ps -a  #-a查看所有
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS      PORTS               NAMES
5d5a89b11c56        tomcat:latest       "/bin/bash"         49 seconds ago      Created                         trusting_pare

4.3 启动容器

 docker start 容器id
[root@server1 docker]# docker start 5d5a89b11c56 
5d5a89b11c56
#查看状态
[root@server1 docker]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
5d5a89b11c56        tomcat:latest       "/bin/bash"         2 minutes ago       Up 44 seconds       8080/tcp            trusting_pare
#状态为up

4.4 进入容器

[root@server1 docker]# docker exec -it 容器id  /bin/bash

4.5 删除容器

必须先停止容器

[root@server1 docker]# docker stop ef27a446e3c9  #容器id
ef27a446e3c9
[root@server1 docker]# docker rm ef27a446e3c9 #容器id
ef27a446e3c9

批量删除容器

[root@server1 ~]# docker ps -a | awk '{print "docker rm "$1}' |bash
Error: No such container: CONTAINER
cc985082a4bd
ca77bdbcbe08
1afa0ca0d52f
Error response from daemon: You cannot remove a running container 6e1db4de053b497009e60f1f0d0894aa9660e2685971ce16c25d32aeb7b332a6. Stop the container before attempting removal or force remove
5d5a89b11c56
[root@server1 ~]# docker ps -a  #up状态未被删除
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
6e1db4de053b        centos:7            "/bin/bash"         27 minutes ago      Up 27 minutes                           quizzical_lumiere

4.6 三合一,docker run

拉取镜像、制作容器和启动容器可以用一条命令完成,即三合一,容器平稳运行三步骤:下载镜像、创建容器、启动容器。

[root@server1 docker]# docker run -itd centos:7 /bin/bash  #进程放在后台运行
Unable to find image 'centos:7' locally
7: Pulling from library/centos
2d473b07cdd5: Pull complete 
Digest: sha256:0f4ec88e21daf75124b8a9e5ca03c37a5e937e0e108a255d890492430789b60e
Status: Downloaded newer image for centos:7

#可以发现一条命令实现了生成镜像并创建容器,启动容器成功
[root@server1 docker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              7                   8652b9f0cb4c        11 days ago         204MB
[root@server1 docker]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                          PORTS               NAMES
6e1db4de053b        centos:7            "/bin/bash"         About a minute ago   Up About a minute                                   quizzical_lumiere

启动执行命令,查看系统根目录
[root@server1 docker]# docker run centos:7 /bin/bash -c ls /   #-c, 执行命令
anaconda-post.log
bin
dev
etc
home
lib
lib64
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var

#进入容器,查看容器IP
[root@server1 docker]# docker exec -it 6e1db4de053b /bin/bash
[root@6e1db4de053b /]# 	yum -y install net-tools #安装网络工具
[root@6e1db4de053b /]# ifconfig  #查看网卡信息
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.3  netmask 255.255.0.0  broadcast 172.17.255.255

#172.17.0.3是容器IP,用于与外界通信,网桥是172.17.0.1,启动docker后,虚拟机节点生成的
        
        ether 02:42:ac:11:00:03  txqueuelen 0  (Ethernet)
        RX packets 6225  bytes 11272335 (10.7 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3549  bytes 194944 (190.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1  (Local Loopback)
        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)

4.7 返回码

强行关闭容器,返回码为非0

[root@server1 ~]# docker run centos:7 /usr/bin/bash -c "while true;do echo hello;done"  #持续在后台运行
[root@server1 ~]# docker stop cc985082a4bd 
cc985082a4bd
[root@server1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                       PORTS               NAMES
cc985082a4bd        centos:7            "/usr/bin/bash -c 'w…"   About a minute ago   Exited (137) 9 seconds ago                       jovial_mclaren

执行完成结束,或为执行成功,返回状态码0

[root@server1 docker]# docker run centos:7 /bin/bash -c ls / 
[root@server1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                       PORTS               NAMES
1afa0ca0d52f        centos:7            "/bin/bash -c ls /"      8 minutes ago        Exited (0) 8 minutes ago                         exciting_satoshi

4.8 容器导出

[root@server1 ~]# docker export 6e1db4de053b  > /opt/cent_c  #容器id > 需要导出的目录,和保存名
[root@server1 ~]# ll /opt
总用量 1559008
-rw-r--r--. 1 root root 274841600 1125 16:33 cent_c  #生成的容器包
drwx--x--x. 4 root root        28 1125 14:19 containerd
-rw-------. 1 root root 660788224 1125 15:31 nginx
drwxr-xr-x. 2 root root         6 326 2015 rh
-rw-------. 1 root root 660788224 1125 15:32 tomcat

4.9 容器导入(只会生成镜像,不会创建容器)

先删除原来的容器,镜像,再导入

[root@server1 ~]# docker stop 6e1db4de053b 
6e1db4de053b  #停止容器
[root@server1 ~]# docker rm 6e1db4de053b 
6e1db4de053b   #删除容器
[root@server1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@server1 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
tomcat              latest              e0bd8b34b4ea        6 days ago          649MB
centos              7                   8652b9f0cb4c        11 days ago         204MB
[root@server1 ~]# docker rmi 8652b9f0cb4c  #删除镜像
Untagged: centos:7
Untagged: centos@sha256:0f4ec88e21daf75124b8a9e5ca03c37a5e937e0e108a255d890492430789b60e
Deleted: sha256:8652b9f0cb4c0599575e5a003f5906876e10c1ceb2ab9fe1786712dac14a50cf
Deleted: sha256:174f5685490326fc0a1c0f5570b8663732189b327007e47ff13d2ca59673db02

[root@server1 ~]# cat /opt/cent_c | docker import - centos:7  #导入容器的镜像
sha256:4f280dc8c8070c8c7384b2871ae50f10cdf86e8aff486f9ff7ebdb77e5334d33
[root@server1 ~]# docker images  #查看镜像生成
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              7                   4f280dc8c807        4 seconds ago       267MB
tomcat              latest              e0bd8b34b4ea        6 days ago          649MB
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值