用于支持yum-config-manager 命令
[root@localhost ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[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"]
}
#搜索镜像
[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
[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
[root@docker ~]# docker run --help
root@docker ~]# docker image --help
以此类推create、exec、start、stop等都可以此方法查看相应得语法及参数。
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分别有四种网络模式。
[root@docker ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
b77bf711431b bridge bridge local
e9eb282b43f1 host host local
b51c040ec354 none null local
该模式可以理解为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": "",
该模式是将宿主机的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
不难看出容器与宿主机使用了同样的网络
该模式是与一个已存在的容器绑定,共享该容器的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模式,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