docker使用

镜像

介绍

镜像是Docker的三大核心概念之一。
Docker运行容器前需要本地存在对应的镜像,如果镜像不存在本地,Docker会尝试先从默认镜像仓库下载(默认使用Docker Hub公共注册服务器中的仓库),用户也可以用过配置,使用自定义的镜像仓库。

Docker环境信息   info、version
镜像仓库命令      login、logout、pull、push、search
镜像管理          build、images、rmi、save、tag、commit、import、load
容器生命周期管理  create、exec、kill、pause、restart、rm、run、start、stop、unpause
容器运维操作      attach、export、inspect、port、ps、rename、stats、top、wait、cpdiff、update
容器资源管理      volume、network
系统信息日志      events、history、logs
1.events打印容器的实时系统事件
2.history 打印出指定镜像的历史版本信息
3.logs打印容器中进程的运行日志

公共注册服务器仓库

获取镜像

docker pull --help

查询本地镜像

docker images --help

使用docker images 可以看到本地的镜像列表:
在这里插入图片描述

删除镜像

docker rmi --help

删除镜像通过命令docker rmi 镜像id完成,需要注意的是,删除镜像前,要删除所有使用到该镜像的容器。
在这里插入图片描述
-f参数是强制删除,如果有正在运行的容器使用了该镜像,那么该镜像是不会真正的删除的。

导入导出操作

save命令将镜像保存为tar文件。

docker save -o images.tar postgres:9.6

load命令将tar文件加载到本地镜像中。

docker load -i  images.tar

搜索镜像

docker search --help

刚刚我们是通过网页进行搜索,其实用过docker的命令也可以搜索,具体如下:
在这里插入图片描述

镜像加速

当你拉去docker官方仓库镜像是发现经常超时,这个时候需要使用加速器。
阿里云仓库
1.获取阿里云加速器
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.在linux中执行

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://0qkswp0o.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

容器

介绍

容器是Docker的另一个核心概念
简单的说,容器是镜像的一个运行实例,所不同的是它带有额外的可写文件层。
如果认为虚拟机是模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和跑在上面的应用。那么Docker容器就是独立运行的一个或一组应用,以及它们的必须运行环境。

查看容器列表

docker ps --help

创建容器

docker create --help

通过docker create 命令可以创建一个容器,这仅仅是创建,并没有启动容器。

启动/停止

启动

docker start 容器名或容器id

停止

docker stop 容器名或容器id

docker kill 容器名或容器id

在这里插入图片描述

创建并且运行容器

docker run -p 16381:6379 --name redis2 redis:6

在这里插入图片描述
发现,这个容器已经创建并且运行,但是,它并没有在后台运行,当按下 control + c时,该容器将停止。

为了让容器在后台运行,需要添加参数 -d。

docker run -p 16380:6379 -d --name redis2 redis:6

在这里插入图片描述

删除容器

docker rm 容器名或容器id

通过命令docker rm 删除容器,删除正在运行的容器添加 -f 参数。
在这里插入图片描述

进入容器

docker exec -it 容器名或id

注:control + d 退出容器。

如:进入redis容器

docker exec -it redis /bin/bash

在这里插入图片描述

查看日志

docker logs -f 容器名或id

仓库

创建仓库

阿里云既提供了加速功能,也提供了仓库功能,也就是我们可以将自己的镜像上传到阿里云仓库。

  1. 创建命名空间
    在这里插入图片描述
  2. 创建镜像
    在这里插入图片描述
    创建完成后就可以上传镜像到该仓库了。

推送镜像

1.docker登录阿里云

sudo docker login --username=gongzhen1175533636@163.com registry.cn-hangzhou.aliyuncs.com

在这里插入图片描述
2.给镜像打包

docker tag redis:6 registry.cn-hangzhou.aliyuncs.com/test_gz/redis:6

3.推送镜像到阿里云

docker push registry.cn-hangzhou.aliyuncs.com/test_gz/redis:6

4.查看版本
在这里插入图片描述在这里插入图片描述
5.删除本地镜像,重新拉取
在这里插入图片描述

容器网络

docker提供了三个开箱即用的网络模式(驱动)bridge、host 和none

一、bridge模式
docker的默认模式,docker进程第一次启动会创建一个docker0虚拟网桥,
此宿主机上启动的容器会默认连接到这个网桥上,容器通过这块网桥NAT访问外部网络,
当执行docker run 加入-p参数是,实际是在iptables中加入了对应的DNAT端口转发规则。
二、host模式
host模式的容器跟宿主机共用一个namespace,拥有一样的IP和路由,因此容器内的服务端口不能跟宿主机相同;
host模式主要用于对网络性能要求高、追求传输效率的服务,但是需要注意的是会占用主机的端口,多个容器工作可能需要处理冲突。
三、none模式
none模式创建的容器没有添加网卡,需要自行配置。

birdge模式

bridge模式下容器没有一个公有ip,只有宿主机可以直接访问,外部主机时不可见的,容器通过宿主机的NAT规则后访问外网
在这里插入图片描述
可以看到这个容器的ip与桥接接口在一个网段,并且ip地址以网桥ip为基础递增,以网桥ip为网关

bridge是docker默认网络模式,docker安装后会选择一个私有网段作为bridge的子网,从下面config中可以看到我们的16位掩码的子网是172.17.0.0/16,这样在我们创建容器时默认会将容器网络加入到这个子网中。

[root@10 ~]# docker inspect bridge
[
    {
        "Name": "bridge",
        "Id": "41a7d734becc3655de361f598339ca8a355bc2107d8600af642a29ad85134567",
        "Created": "2021-12-18T12:34:25.570861489Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "dad24a664a24fdae23c536b5aed18855820434b74084cc88d0be12c37e89dc6d": {
                "Name": "nginx",
                "EndpointID": "9e8f254709a6d2eccfa132fb17418e7b803ab4d783f2257735010d2971323140",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
        },
        "Labels": {}
    }
]

host模式

host模式可以让容器共享宿主机网络栈,这样的好处时外部与容器直接进行通信,但是容器的网络缺少隔离性。
在这里插入图片描述
测试:
在真机上可以访问到宿主机的ip,看到nginx服务的默认页面,其实访问的是容器,因为容器的ip与宿主机的ip一模一样

[root@10 ~]# docker pull nginx
# 指定网络模式为host
[root@10 ~]# docker run -d --name nginx1 --network=host nginx:latest
# 请求宿主机地址,nginx默认开启80端口,所以会打印nginx
[root@10 ~]# curl 192.168.56.71
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

常用命令

不指定网络驱动时默认创建的bridge网络

docker network create default_network

列所有列表的网络

docker network  ls

查看网络内部信息

docker network inspect default_network

移除指定的网络

docker network rm default_network

完整

# --dirver、--subnet、--gateway分别指定我们的驱动、子网和网关
docker network create --driver bridge --subnet 172.0.0.0/24 --gateway 172.0.0.1 newbridge

数据卷

docker在容器中管理数据主要有两种方式:

  • 挂载主机目录(Bind mounts)
  • 数据卷(Volumes)

挂载

docker run -it -v /宿主机目录:/docker目录 --name nginx nginx:laster 

-v:宿主机目录:docker目录 (必须为绝对路径)

数据卷常用命令

创建数据卷

docker volume create mydata

查看所有数据卷

docker volume ls 

查看数据卷信息

docker volume inspect mydata 

删除数据卷

docker volume rm mydata 

问题

常用参数

-e 环境 -e MYSQL_ROOT_PASSWORD=root 对应dockerfile的ENV
-d 后台运行
-v 挂载 -v /data/redis/data:/data>
–name 容器的名称
-p 端口映射 -p 8080:8080
–build-arg:参数,对用dockerfile中的ARG
–link: 可以用来链接2个容器,使得源容器(被链接的容器)和接收容器(主动去链接的容器)之间可以互相通信
–link的格式: --link :alias

例子:
源容器: docker run -d --name node1 node1:laster
接收容器: docker run -d --name node2 --link node1:aliasNode1 node2:laster
node1作为源容器,aliasNode1是该容器在link下的别名(alias),通俗易懂的讲,站在node2容器的角度,node1和aliasNode1作为源容器的hostname,node2可以通过node1和aliasNode1访问。

开机启动

docker update nginx --restart=always

解决docker容器内没有ip addr | ifconfig | ping命令

apt-get update

apt install net-tools       # ifconfig 
apt install iputils-ping     # ping
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值