文章目录
- Docker
- yum在线安装
- 安装yum-utils
- 下载aliyun的repo源
- 下载Docker
- 配置加速器
- Docker基本操作
- 拉取镜像
- Ubuntu
- Centos
- 创建两个容器
- 容器的停止/重启
- 查看容器
- 退出容器
- 交互式
- 非交互式
- 查看容器内部信息
- 查看Docker相关命令帮助
- docker run
- docker image
- 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 EngineLoaded: 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
[root@docker ~]# docker run --help
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 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::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 1000link/ether 00:0c:29:1d:c5:f6 brd ff:ff:ff:ff:ff:ffinet 192.168.110.145/24 brd 192.168.110.255 scope global noprefixroute ens33valid_lft forever preferred_lft foreverinet6 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:ffinet 172.17.0.1/16 brd 172.17.255.255 scope global docker0valid_lft forever preferred_lft foreverinet6 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 1inet6 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 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_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 0inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0valid_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 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever