Docker入门知识讲解与实践

news/2024/6/3 17:51:06 标签: docker, 容器, 运维

文章目录

  • Docker
    • yum在线安装
      • 安装yum-utils
      • 下载aliyun的repo源
      • 下载Docker
      • 配置加速器
    • Docker基本操作
    • Docker save与Docker export的区别
      • 示例
    • Docker的网络模式
      • bridge
      • host
      • container
      • none

Docker

yum在线安装

安装yum-utils

用于支持yum-config-manager 命令

下载aliyun的repo源

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

下载Docker

[root@localhost ~]# yum install docker-ce
#查看是否安装好
[root@localhost ~]# systemctl status docker.service docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: https://docs.docker.com

配置加速器

(1)从2017年6月9日起,Docker 官方提供了在中国的加速器,以解决墙的问题。不用注册,直接使用 加速器地址:https://registry.docker-cn.com 即可。

(2)中国科技大学的镜像加速器: 中科大的加速器不用注册,直接使用地址 https://docker.mirrors.ustc.edu.cn/ 配加速器即可。进一步的信息可以访问: http://mirrors.ustc.edu.cn/help/dockerhub.html?highlight=docker

(3)阿里云加速器: 注册阿里云开发账户(免费的)后,访问这个链接就可以看到加速器地址: https://cr.console.aliyun.com/#/accelerator。

#这里用中科大的源
[root@localhost ~]# cat /etc/docker/daemon.json
{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

Docker基本操作

拉取镜像

Ubuntu

#搜索镜像
[root@docker ~]# docker search ubuntu
NAME                             DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
ubuntu                           Ubuntu is a Debian-based Linux operating sys…   16295     [OK]       
#OFFICIAL 表示官方镜像
#拉取镜像
[root@docker ~]# docker pull ubuntu

Centos

[root@docker ~]# docker pull centos
#列出本地镜像
[root@docker ~]# docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
mysql        5.7       c20987f18b13   20 months ago   448MB
httpd        latest    dabbfbe0c57b   20 months ago   144MB
ubuntu       latest    ba6acccedd29   22 months ago   72.8MB
centos       latest    5d0da3dc9764   23 months ago   231MB

创建两个容器

docker run 创建容器并启动,也可以使用create 然后再 start启动。

[root@docker ~]# docker run --name os1 -d -it centos:latest /bin/bash
[root@docker ~]# docker run --name os2 -d -it ubuntu:latest /bin/bash
[root@docker ~]# docker ps
CONTAINER ID   IMAGE           COMMAND       CREATED          STATUS          PORTS     NAMES
9b6e62cba175   ubuntu:latest   "/bin/bash"   5 seconds ago    Up 4 seconds              os2
1eabe2af703a   centos:latest   "/bin/bash"   37 seconds ago   Up 36 seconds             os1

容器的停止/重启

[root@docker ~]# docker stop os1
os1
[root@docker ~]# docker ps
CONTAINER ID   IMAGE           COMMAND       CREATED         STATUS         PORTS     NAMES
9b6e62cba175   ubuntu:latest   "/bin/bash"   2 minutes ago   Up 2 minutes             os2
#这里也可用使用容器ID来替代名字
[root@docker ~]# docker restart os1
os1
[root@docker ~]# docker ps
CONTAINER ID   IMAGE           COMMAND       CREATED         STATUS         PORTS     NAMES
9b6e62cba175   ubuntu:latest   "/bin/bash"   3 minutes ago   Up 3 minutes             os2
1eabe2af703a   centos:latest   "/bin/bash"   4 minutes ago   Up 2 seconds             os1

查看容器

#用于查看已在运行的容器
[root@docker ~]# docker ps

#查看所有已创建的容器
[root@docker ~]# docker ps -a

退出容器

交互式

[root@docker ~]# docker exec -it os1 /bin/bash
[root@1eabe2af703a /]# exit
exit

非交互式

[root@docker ~]# docker exec -it os1 /bin/bash
#然后另起一个终端
[root@docker /]# docker stop os1

查看容器内部信息

[root@docker ~]# docker inspect os1/ID

查看Docker相关命令帮助

docker_run_137">docker run

[root@docker ~]# docker run --help

docker_image_143">docker image

root@docker ~]# docker image --help

以此类推create、exec、start、stop等都可以此方法查看相应得语法及参数。

Docker save与Docker export的区别

docker save保存的是镜像(image),docker export保存的是容器(container)

示例

#导出镜像
[root@docker ~]# docker save centos:latest -o centos:latestV1.tar
#加载镜像
[root@docker ~]# docker load -i centos:latestV1.tar 
#导出容器
[root@docker ~]# docker export os1 -o containerCentOS1.tar
#载入容器,但载入后只能恢复为镜像
[root@docker ~]# docker import containerCentOS1.tar

所以,docker save 与docker load一起使用,docker export与docker import 使用。

Docker的网络模式

Docker分别有四种网络模式。

[root@docker ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
b77bf711431b   bridge    bridge    local
e9eb282b43f1   host      host      local
b51c040ec354   none      null      local

bridge

该模式可以理解为NAT模式;当docker服务安装好之后便会在宿主机上创建一张网卡,那么该网卡就是容器的网关;创建容器时不指定模式默认使用bridge模式。

#宿主机网卡及IP
[root@docker ~]# ip addr | grep docker 
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
17: vethe8c9633@if16: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
#容器网卡及IP
[root@docker ~]# docker inspect os2 | grep -i ipaddress
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.3",
                    "IPAddress": "172.17.0.3",
#容器网关地址
[root@docker ~]# docker inspect os2 | grep -i gateway
            "Gateway": "172.17.0.1",
            "IPv6Gateway": "",
                    "Gateway": "172.17.0.1",
                    "IPv6Gateway": "",

host

该模式是将宿主机的IP与端口等同时作为容器的IP地址与端口使用;即容器不再虚拟出自己的IP与端口。

演示

[root@docker ~]# docker run -d -it --name os1 --network host centos:latest /bin/bash
#查看容器信息
[root@docker ~]# docker inspect os1 | grep -i ipaddress
            "SecondaryIPAddresses": null,
            "IPAddress": "",
                    "IPAddress": "",
[root@docker ~]# docker inspect os1 | grep -i gateway
            "Gateway": "",
            "IPv6Gateway": "",
                    "Gateway": "",
                    "IPv6Gateway": "",
#进入容器内部查看
[root@docker ~]# docker exec -it os1 /bin/bash
[root@docker /]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:1d:c5:f6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.110.145/24 brd 192.168.110.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::108a:4d22:ab15:ea33/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:f4:0b:5b:35 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:f4ff:fe0b:5b35/64 scope link 
       valid_lft forever preferred_lft forever
17: vethe8c9633@if16: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default 
    link/ether 12:70:d8:23:03:7b brd ff:ff:ff:ff:ff:ff link-netnsid 1
    inet6 fe80::1070:d8ff:fe23:37b/64 scope link 
       valid_lft forever preferred_lft forever
[root@docker /]# exit
exit

不难看出容器与宿主机使用了同样的网络

container

该模式是与一个已存在的容器绑定,共享该容器的Network Namespace。

演示

[root@docker ~]# docker run -d -it --name os3 --network container:os2 centos:latest /bin/bash
#检查
[root@docker ~]# docker exec -it os3 /bin/bash
[root@9b6e62cba175 /]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
16: eth0@if17: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever

IP为172.17.0.3与OS2一样

none

使用none模式,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网 络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息,只有lo 网络接口。需要我们自己为 Docker容器添加网卡、配置IP等。

演示

[root@docker ~]# docker run -d -it --name os1 --network none centos:latest /bin/bash
#检查
[root@docker ~]# docker exec -it os1 /bin/bash
[root@5edd67c45823 /]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever

http://www.niftyadmin.cn/n/4951793.html

相关文章

深度学习在组织病理学图像分析中的应用: Python实现和代码解析

引言 组织病理学是医学的一个重要分支&#xff0c;它主要研究组织和细胞的形态学改变&#xff0c;以确定疾病的性质和发展。随着深度学习技术的进步&#xff0c;其在组织病理学图像分析中的应用也变得日益重要。本文旨在介绍如何使用Python和深度学习技术来处理和分析组织病理…

mybatis 基础上整合 mybatis-plus

1.引入依赖 <!--引入Mybatis-plus--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.3.2</version></dependency> 2.修改application.yml 文件 ,把 myb…

【模拟集成电路】反馈系统——基础到进阶(一)

【模拟集成电路】反馈系统——基础到进阶 前言1 概述2 反馈电路特性2.1增益灵敏度降低2.2 终端阻抗变化2.3 带宽拓展2.4 非线性减小 3 放大器分类4 反馈检测和返回机制4.1 按照检测物理量分类4.2 按照检测拓扑连接分类 5 反馈结构分析6 二端口方法7 波特方法6 麦德布鲁克方法 前…

双指针算法实例1(移动零)

常⻅的双指针有两种形式&#xff1a; 1 对撞指针&#xff08;左右指针&#xff09;&#xff1a; a 对撞指针从两端向中间移动。⼀个指针从最左端开始&#xff0c;另⼀个从最右端开始&#xff0c;然后逐渐往中间逼 近 b 终止条件一般是两指针相遇or错过&#xff08;也可能在循…

使用Scikit-Learn实现多标签分类,助力机器学习

大家好&#xff0c;在机器学习任务中&#xff0c;分类是一种监督学习方法&#xff0c;用于根据输入数据预测标签。例如&#xff0c;我们想要根据历史特征预测某人是否对销售优惠感兴趣&#xff0c;通过使用可用的训练数据训练机器学习模型&#xff0c;可以对输入数据执行分类任…

Optional的基础运用

Optional的基础运用 简介代码示例 简介 代码示例 package org.example;import org.junit.Test;import java.util.Optional;public class OptionalTest {Testpublic void advance() {String str "hello";str null;// of(T t):封装数据t生成Optional对象&#xff0c…

[kali]kali2023.2 Debian12安装mysql8.0

kali2023是debian12系统&#xff0c;内置有maridb数据库其实和mysql差不多&#xff0c;现在如果非要安装mysql8.0可以按照如下步骤 首先必须卸载mariadb sudo apt purge mariadb-server mariadb-client sudo apt autoremove 使用官方最新地址 wget https://dev.mysql.com/…

open suse 15.5(任意版本) 使用阿里云的repo

一、shell suse 的包管理工具叫 zypper. zypper addrepo -f http://mirrors.aliyun.com/opensuse/distribution/leap/15.5/repo/oss/ openSUSE-15.5-Oss zypper addrepo -f http://mirrors.aliyun.com/opensuse/distribution/leap/15.5/repo/non-oss/ openSUSE-15.5-Non-Oss …