docker安装与使用
yum -y install docker
启动docker
systemctl start docker
国外镜像网站
https://hub.docker.com/
国内镜像网站
https://docker.mirrors.ustc.edu.cn
修改镜像地址
vi /etc/docker/daemon.json
请在该配置文件中加入(没有该文件的话,请先建一个):
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
镜像操作
下载指定镜像
docker pull 镜像名字:TAG
下载最新镜像(就是letest版本)
docker pull 镜像名字
查看已下载得镜像
docker images
删除镜像
docker rmi 镜像名字:tag 或者写id
删除所有镜像
docker rmi $(docker images -q)
导出、导入镜像
docker save repository:tag/imageId > /root/xx.tar.gz
docker load < /root/xx.tar.gz
docker save -o mynginx.tar nginx(要导出得镜像名字有多个就加tag nginx:1.16.0,这个模式不能用ID)
docker load -i mynginx.tar
-o 输出到的文件
执行后,运行 ls 命令即可看到打成的 tar 包
-i 输入的文件
执行后再次查看镜像,可以看到镜像已经恢复
容器
创建容器
模式1
docker run -i -t --name=my_ngx -v /本地/目录/:/docker/目录 -v /本地/目录1/:/docker/目录 --privileged=true -p 80:80 --net mynetwork --ip 172.18.0.2 nginx:1.16.0
模式2
docker run -di --name=my_ngx -v /本地/目录/:/docker/目录 -v /本地/目录1/:/docker/目录 --privileged=true -p 80:80 -p 80:80 --net mynetwork --ip 172.18.0.2 nginx:1.16.0
-i:表示运行容器
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即
分配一个伪终端。
--name :为创建的容器命名。(“=”号写不写都行,我比较习惯写上,比较容易分辨)
-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使
用多个-v 做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后
共享到容器上。
-d:在 run 后面加上-d 参数,则会创建一个守护式容器在后台运行(这样创建容器后不会
自动登录容器,如果只加-i -t 两个参数,创建后就会自动进去容器)。
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p
做多个端口映射
容器操作
进入到容器
docker exec -it my_ngx /bin/bash
停止
docker stop my_ngx
运行
docker start my_ngx
删除
docker rm my_ngx
组合技
docker ps -a -q
ps:列出当前运行得容器
-a:列出所有创建得容器
-q:只显示id(效果是这样的,具体是不是这个说法……)
docker stop $(docker ps -a -q) 停止所有容器
另外有些容器 是启动之后应用直接运行得,有些需要进去启动,希望大家别被这个坑了。
关于docker如何修改已经创建得容器端口和目录:我修改过端口,目录没有试过具体操作是先查看容器的ID
到/var/lib/docker/containers/容器id/hostconfig.json
这个文件里面
可以看到,刚才我们启动容器的时候,配置的信息都在这。
我先停止了容器和docker,然后修改了这个文件,再启动。
端口是好使,映射目录好像不太好用。如果没有必要,容器直接删了重建。
如果需要在镜像内安装工具
直接运行下面得install出错,就执行update
apt-get update
我用到得几个工具
apt-get install procps docker ps命令
apt-get install vim docker vi命令
apt-get install iputils-ping ping命令
apt-get install lsof 看端口占用命令 lsof -i:8080
网络方面
如果直接启动的话 ,ip是动态的 ,如果你需要一个固定ip,那就需要自己创建一个网关了
docker network create --subnet=172.18.0.0/16 mynetwork
使用docker network ls 查看
这时候 固定ip的问题解决了 ,但是 还有个很坑的问题。他们之间网络是不通的……
此处省略很多心路历程……
简单的说就是因为网关的问题,docker 默认网关是172.17.0.1,这时候如果你想使用这个网关的docker容器们,网络互通的话,就需要修改docker 默认网关。
emm,按照这个来做基本就可以了,为了方便大家阅读我就直接粘过来了。https://blog.csdn.net/tomspcc/article/details/78423068
停止docker
service docker stop
删除docker防火墙过滤规则
iptables -t nat -F POSTROUTING
删除docker默认网关配置
ip link set dev docker0 down
ip addr del 172.17.0.1/16 dev docker0
增加新的docker网关配置
ip addr add 172.18.0.1/16 dev docker0
ip link set dev docker0 up
检测是否配置成功,如果输出信息中有 172.18.0.1,则表明成功
ip addr show docker0
service docker start
验证docker防火墙过滤规则
iptables -t nat -L -n
上面的 ip后面的数字16,搜了一下
表示掩码是16个1。
11111111.11111111.0000000.0000000
这是2进制的掩码,转化为10进制掩码是255.255.0.0。
修改完之后route -n 显示的还是之前的网关,但是去到容器里面 已经可以相互ping通了
详细的网络方面可以看看这个https://www.jianshu.com/p/d84cdfe2ea86