container(容器)
docker(集装箱)
容器的优点
1、 启动速度快
2、 节省资源
兼容性高
启动docker
# systemctl start docker
设置开机自启动
# systemctl enable docker
查看本地镜像
# docker images
查询具体的镜像(centos),默认去docker官方网站repository仓库里面查找
# docker search centos
再例如查找mysql镜像
# docker search mysql
下载镜像,速度慢,从国外网站下载
不建议使用
#docker pull centos
# docker pull daocloud.io/centos:7
创建一个镜像
如果要使用镜像的话,repository+tag才是一个完整的名字
如果没有指定tag的话,则默认为latest
# docker tag daocloud.io/centos:7 centos
删除一个镜像
docker rmi 镜像名
# docker rmi daocloud.io/centos:7
查看正在运行的容器
# docker ps
查看所有容器
# docker ps -a
创建、运行一个容器
# docker run --name node1 -h nodex -d -i -t centos /bin/bash
-i(进行一种交互式)
-t(提供模拟终端)
-d(创建容器之后不自动进入容器)
-p:(端口映射,格式为:主机(宿主)端口:容器端口)
-h(指定容器的hostname)
--name (容器名)或者--name=容器名
restart=always(时刻启动,开机自启动)
注意:docker一次,只能运行一个服务
退出容器
#exit
如果容器上不了网,则开启物理机的转发功能(临时开启,写入内存,在内存中开启)
# echo 1 > /proc//sys/net/ipv4/ip_forward
开启容器
docker start 容器名
# docker start e763c37cbe91
关闭容器
docker stop 容器名
#docker stop node3
进入容器
docker attach 容器名
docker exec -i -t 容器名 bash
# docker attach e763c37cbe91
# docker exec -it node1 bash
attach和exec进入容器的区别:
创建容器时后面没有/bin/bash
# docker run -i -t -d -h nodev --name node2 centos
能进入容器
# docker attach node2
不能进入容器
# docker exec -it node2 bash
创建容器时后面有/bin/bash
能进入容器
# docker attach node3
能进入容器
# docker run -i -t -d -h nodec --name node3 centos /bin/bash
当我exit退出容器之后,发现活动的容器没有了
解决办法
创建容器的时候加
restart=always(时刻启动,开机自启动)
也可以后期补救
docker update docker参数 容器名
# docker update --restart=always node2
删除一个容器
docker rm 容器名
# docker rm e
不进入容器,在某个容器执行特定命令,适合写脚本用
docker exec 容器名 '命令'
# docker exec node1 'ifconfig'
用-v挂载主机数据卷到容器内
通过-v参数,冒号前为宿主机目录,必须为绝对路径,冒号后为镜像内挂载的路径。
这种方式的缺点是只能在容器刚刚启动的情况下进行挂载
创建一个目录用于映射
# mkdir /data
# cp /etc/passwd /etc/services /etc/hosts /data
/data(物理机):/xx(容器)
# docker run -v /data:/xx --name=node4 -h nodea --restart=always -i -t centos /bin/bash
查看所有对应关系
docker inspect 容器名
# docker inspect node4
查看具体某个对应关系
# docker inspect node4 | grep -i -A10 mount