前言:
docker解决了什么?开发和运维之间以及其他任何环境之间的任何问题,能够一次性成型,到处运行。
docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的linux机器上,也可以实现虚拟化。
概念:
容器:使用镜像常见的应用或系统
镜像:其实就是模板,跟我们常见的ISO镜像类似,是一个模板。
仓库:存放镜像的地方,分为公开的仓库和私有的仓库。
下载安装:
1、执行脚本
curl -sSL https://get.daocloud.io/docker | sh
2、安装
yum install docker-ce -y
3、启动
systemctl start docker
4、测试
docker -v
使用
基本命令:
docker -v #仅仅打印版本内容,v是version的缩写
docker info #有客户端和服务端的各种信息展示
docker --help #直接docker就行
1、镜像命令
查看镜像:docker images # -a:列出本地所有镜像 -q:只显示镜像id
2、搜索(docker hub上)是否有要的镜像
docker search 要查找的名
3、拉镜像
docker pull 镜像名:版本 #一般不写版本就默认最新版本latest
4、删除镜像
docker rmi -f 镜像名
要删除多个就空格隔开(和linux的rm -rf 一样)
新建容器
docker run [option] IMAGE [command] [rds]
option:
--name:“容器新名字”:为容器指定一个名称。
-d:后台运行容器,并返回容器ID,也即启动守护式容器
-i:以交互模式运行容器,通常与-t同时使用
-t:为容器重新分配一个伪输入终端,通常与-i同时使用
-P:随机端口映射
-p:指定端口映射,有以下四种方法:
ip:hostprot:container prot
ip:containerPore
hostprot:containerPore
container pore
案例:
docker run -it --name centos_studey centos #新建一个容器centos_studey,将centos的镜像封装在里面
docker run -d --name tomcat_test -p 8081:8080 tomcat:8.5 #分配本机8081端口对应容器的8080端口。
进入正在运行的容器:
1、运用多
docker exec -it 容器id /bin/bash
2、运用少
docker attadr 容器id
两种方式的区别:
attach 直接进入容器启动命令的终端,不会启动新进程。
exec 在容器中打开新的终端,并且可以启动新进程。
退出容器:
exit 容器停止退出(不多)
ctr +q+p 容器不停止退出(多)
用于从容器内部切换到外部
列出当前正在进行的容器
docker ps 只展示正运行
docker ps -a 查看所有容器
容器启动/重启/停止、强行停止:
前提:已存在的容器
docker start/restart/stop 容器/id
强行停止
docker kill 容器/id
删除‘已停止’的容器
docker rm 容器/id
从容器内拷贝文件到主机上
docker cp 容器id:容器内的路程 主机目录
备份
docker commit -a=‘作者’ -m=‘描述’ 容器id 新的镜像名/名称:版本
验证:docker images
Docker容器做端口映射报错
docker: Error response from daemon: driver failed programming external connectivity on endpoint lamp3 (46b7917c940f7358948e55ec2df69a4dec2c6c7071b002bd374e8dbf0d40022c): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 86 -j DNAT --to-destination 172.17.0.2:80 ! -i docker0: iptables: No chain/target/match by that name.
解决方法
docker服务启动时定义的自定义链DOCKER被清除
重启即可systemctl restart docker