Docker扫盲

这篇博客详细介绍了Docker的基础知识,包括安装、镜像与容器的管理、运行web应用、镜像创建、容器链接和Docker仓库管理。还提到了Dockerfile的使用和Docker Compose的配置与运行,适合Docker初学者扫盲。
摘要由CSDN通过智能技术生成

Docker基础扫盲

扫盲

安装

操作系统:ubuntu20

  • 卸载旧版本:sudo apt-get remove docker docker-engine docker.io containerd runc

  • 更新apt和软件:sudo apt-get update&&sudo apt-get upgrade

  • 安装依赖:sudo apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common

  • 添加GPG密钥,官方的:curl -fsSL https://download.docker.com/linux/ubuntu/gpg| sudo apt-key add -或者阿里云的:curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

  • 添加软件源(amd64架构)

    sudo add-apt-repository \
       "deb [arch=amd64] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu \
       $(lsb_release -cs) \
       stable"
    
  • 安装docker: sudo apt install docker-ce

  • 尝试建立第一个容器:sudo docker run hello-world

  • 免root :sudo usermod -aG docker [你的用户名]

  • 镜像加速:用阿里云的https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

    按操作文档执行即可

镜像与容器

可以比作类与对象的关系

镜像->类

容器->对象

运行第一个docker镜像:

docker run hello-world

  • docker : 当前用户未加入docker组时需要在前面加sudo,使用命令sudo usermod -aG docker [你的用户名]即可将免sudo运行。
  • run 运行docker镜像,若在本地不存在则会从云端仓库里pull下来运行
  • hello-world 镜像名

正常运行则会输出

image-20211121220709680

运行交互式容器

docker run -i -t ubuntu:15.10 /bin/bash

  • -t :在新容器内指定一个伪终端或终端
  • -i : 允许你对容器内的标准输入 (STDIN) 进行交互
  • /bin/bash :在启动的容器里执行的命令

image-20211121221338278

运行成功后进入容器内的终端,尝试执行命令

image-20211121221455135

利用exit即可退出容器终端

后台启动容器

尝试输入

docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"

docker run -itd --name ubuntu-test ubuntu /bin/bash

image-20211121221708598

  • -d 后台启动容器
  • –name 指定容器名

这一长串字符串是容器ID,对于每个容器是唯一的

查看容器列表

docker ps

类似于shell的ps命令,显示当前运行的容器

  • -a :显示所有容器

image-20211121222026822

输出详情介绍:

CONTAINER ID: 容器 ID。

IMAGE: 使用的镜像。

COMMAND: 启动容器时运行的命令。

CREATED: 容器的创建时间。

STATUS: 容器状态。

状态有7种:

  • created(已创建)
  • restarting(重启中)
  • running 或 Up(运行中)
  • removing(迁移中)
  • paused(暂停)
  • exited(停止)
  • dead(死亡)

PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。

NAMES: 自动分配的容器名称。

查看容器的标准输出

之前后台运行了一个容器,id是f20f2b74cd3e

执行docker logs [容器ID]/[容器名称]

可以看到该容器在标准输出中输出了什么

image-20211121222442709

可以看到该容器输出了一堆hello

停止容器

docker stop [容器ID]/[容器名]

image-20211121224022183

容器使用

docker -h

查看所有docker命令帮助,过多

也可单独查看例如docker run --help的命令

启动已经停止的容器

docker start [容器ID]

image-20211121224640061

image-20211121224611131

重启容器

docker restart [容器ID]

进入容器

在使用-d参数开启容器时默认不进入容器,可通过

docker attach [容器ID]

使用该命令如果从这个容器中退出会导致容器停止

例子:docker attach 3bdcab79f93d

image-20211121225316881

docker exec [操作参数] [容器ID][要执行的命令]

例子:docker exec -it 3bdcab79f93d /bin/bash

image-20211121225656785

导入导出容器

docker export [ID] > xxx.tar

导出容器快照到本地文件xxx.tar

image-20211121225917663

从文件中导入容器快照

cat ubuntu.tar | docker import - inspiring_williamson

删除容器

docker rm -f [容器ID]

image-20211121231326173

清理所有终止状态的容器

docker container prune

image-20211121231355656

尝试运行一个web应用

docker pull training/webapp

docker run -d -P training/webapp python app.py

  • **-d:**让容器在后台运行。
  • **-P:**将容器内部使用的网络端口随机映射到我们使用的主机上。

image-20211121232135164

image-20211121232228857

主机的49153端口映射到了容器的5000端口

尝试访问 主机ip:49153

image-20211121232412020

可以通过修改-p的参数设置端口映射

docker run -d -p 5000:5000 training/webapp python app.py

查看端口映射

docker port [容器ID]

image-20211121232721721

查看容器的进程

docker top [容器名]/[容器ID]

image-20211121232932670

检查容器信息

docker inspect [容器ID]

image-20211121233114478

镜像使用

管理镜像

docker images

可以列出本地的镜像列表

image-20211122134954996

各个选项说明:

  • **REPOSITORY:**表示镜像的仓库源
  • **TAG:**镜像的标签
  • **IMAGE ID:**镜像ID
  • **CREATED:**镜像创建时间
  • **SIZE:**镜像大小

同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如 ubuntu 仓库源里,有 15.10、14.04 等多个不同的版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。

例如ubuntu:15.10即为15.10版本的ubuntu镜像

docker run -it ubuntu:15.10 /bin/bash

以上命令可构造一个ubuntu15.10的容器

image-20211122135231655

下载镜像

docker pull [RESPOSITORY]:[TAG]

以上命令会下载镜像

搜索镜像

  • 方法一:去dockerhub中搜索
  • 方法二:docker search [镜像名]

image-20211122135755443

NAME: 镜像仓库源的名称

DESCRIPTION: 镜像的描述

OFFICIAL: 是否 docker 官方发布

stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。

AUTOMATED: 自动构建。

删除镜像

docker rmi [镜像名]/[镜像ID]

image-20211122140119675

创建镜像

可以通过两种方法来更新镜像

  • 1、从已经创建的容器中更新镜像,并且提交这个镜像
  • 2、使用 Dockerfile 指令来创建一个新的镜像

方法一:

首先利用镜像建立容器,以ubuntu15.10为例

docker run -it ubuntu:15.10 /bin/bash

在建立后的容器内输入apt-get update

大概率不成功,但是不影响,退出容器

输入exit

利用docker commit来提交镜像

例如

docker commit -m="has update" -a="mobval" dab854b01ab9 mobval/ubuntu:15v2

image-20211122141156798

  • -m: 提交的描述信息
  • -a: 指定镜像作者
  • **dab854b01ab9:**容器 ID
  • mobval/ubuntu:15v2: 指定要创建的目标镜像名以及tag
构建镜像

docker build

需要创建一个dockerfile 文件来执行这个命令

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

依次执行

  • mkdir dockerfile

  • cd dockerfile

  • nano Dockerfile

  • FROM    centos:6.7
    MAINTAINER      mob "mobval@qq.com"
    
    RUN     /bin/echo 'root:123456' |chpasswd
    RUN     useradd mobval
    RUN     /bin/echo 'mobval:123456' |chpasswd
    RUN     /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
    EXPOSE  22
    EXPOSE  80
    CMD     /usr/sbin/sshd -D
    
  • ctrl+O保存

  • docker build -t runoob/centos:6.7 .

    • t:指定要创建的目标镜像名
  • . :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径

image-20211122142856535

可以看到已经创建成功

添加镜像标签

docker tag [镜像ID] [指定的镜像标签]

image-20211122143206691

可以看到存在不同tag的两个镜像

docker容器链接

端口映射

可以使用两种方式指定端口映射

  • -P :是容器内部端口随机映射到主机的高端口。
  • -p : 是容器内部端口绑定到指定的主机端口。

例子如下:

docker run -d -P training/webapp python app.py

docker run -d -p 5000:5000 training/webapp python app.py

image-20211123095844316

使用-p参数时还可以绑定网络地址,如

docker run -d -p 127.0.0.1:5001:5000 training/webapp python app.py

默认是绑定tcp端口,绑定udp端口可以这样

docker run -d -p 127.0.0.1:5002:5000/udp training/webapp python app.py

docker容器互联

创建容器时可以使用 –name对容器命名

docker run -d -P --name mobval training/webapp python app.py

新建docker网络

docker network create -d [指定的网络类型] [网络名]

-d:参数指定 Docker 网络类型,有 bridge、overlay。

例如:

docker network create -d docker network create -d bridge test

docker network ls 查看当前网络

image-20211123100854855

连接容器

运行容器时使用–network [网络id]/[网络名称]即可加入该网络

docker run -itd --name test1 --network test ubuntu /bin/bash

第二个容器类似

docker run -itd --name test2 --network test ubuntu /bin/bash

进入test1

docker exec -it test1 /bin/bash

执行以下命令

apt-get update

apt install iputils-ping

尝试ping test2

image-20211123102054049

可以ping通,因而容器之间可以建立连接

若是需要多个容器之间互联,可以使用docker compose

配置dns

对新建立的容器才有效

可以在主机的/etc/docker/daemon.json 文件中设置

image-20211123102320843

nano /etc/docker/daemon.json

在最末尾加上

{
   
  "dns" 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值