Docker入门
1、Docker初始
一键安装
curl -sSL https://get.daocloud.io/docker | sh
配置daemon.json文件
docker默认是没有这一文件的,需要手动创建 默认路径为 /etc/docker/daemon.json
配置好后需要重启配置和重启docker
2、Docker入门命令
重启配置
sudo systemctl daemon-reload
重启docker
sudo systemctl restart docker.service
查看docker状态
sudo systemctl status docker -l
查看服务
sudo docker info
启动docker
sudo systemctl start docker
开机自启
sudo systemctl enable docker
查看命令参数
docker 命令 --help
3、Docker镜像命令
查看镜像
docker images
寻找镜像(在远程仓库中寻找)
docker search 镜像名 例子:docker search hello-world
拉取镜像
docker pull 镜像名:版本号(如果不加版本号默认为最新版本latest)
删除镜像
docker rmi -f(强制删除,不推荐使用) 镜像名或镜像ID 删除单个
docker rmi 镜像名:tag 镜像名:tag 删除多个
docker rmi -f $(docker images -qa) 全部删除(生产环境不推荐使用)
虚悬镜像
仓库名、标签都是的镜像,俗称为虚悬镜像dangling image
重构镜像
当我们对现有镜像不满意时,可以自己对现有镜像进行一定的改造
启动镜像并进入内部,改造后退出
docker commit -m=“提交的描述信息” -a=“作者” 容器ID 要创建的目标镜像名:[标签名]
4、Docker容器命令
启动镜像容器
docker run 镜像名 例子:docker run hello-world 启动交互式容器: docker run -it --name= my ubuntu /bin/bash(使用镜像ubuntu 以交互模式启动一个容器,在容器中执行/bin/bash命令 -i:交互式操作 -t:终端 /bin/hash: 使用shell交互。退出终端,直接输入exit --name 为容器起一个名字)
--name="容器新名字": 为容器指定一个名称;
-d: 后台运行容器,并返回容器ID,也即启动守护式容器;
-i:以交互模式运行容器,通常与 -t 同时使用;
-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-P: 随机端口映射;
-p: 指定端口映射,有以下四种格式
ip:hostPort:containerPort
ip::containerPort
hostPort:containerPort
containerPort
查看所有在运行的容器实例
docker ps
-a :列出当前所有正在运行的容器+历史上运行过的
-l :显示最近创建的容器。
-n:显示最近n个创建的容器。
-q :静默模式,只显示容器编号。
--no-trunc :不截断输出。
退出容器
exit 容器停止退出
ctrl+P+Q 容器不停止退出
启动容器
docker start 容器ID或者容器名
重启容器
docker restart 容器ID或者容器名
停止容器
docker stop 容器ID或者容器名
强制停止容器
docker kill 容器ID或者容器名
删除已停止的容器
docker rm 容器ID
docker rm -f 容器ID 强制删除
启动守护式容器(可以在后台运行,适用于mysql、redis、tomcat等容器)
docker run -d centos
问题:然后docker ps -a 进行查看, 会发现容器已经退出
很重要的要说明的一点: Docker容器后台运行,就必须有一个前台进程.
容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),就是会自动退出的。
这个是docker的机制问题,比如你的web容器,我们以nginx为例,正常情况下,我们配置启动服务只需要启动响应的service即可。例如
service nginx start
但是,这样做,nginx为后台进程模式运行,就导致docker前台没有运行的应用,
这样的容器后台启动后,会立即自杀因为他觉得他没事可做了.
所以,最佳的解决方案是,将你要运行的程序以前台进程的形式运行
正确使用方式:
docker run -d mysql
查看容器日志
docker logs -f -t --tail 容器ID
-t 是加入时间戳
-f 跟随最新的日志打印
--tail 数字 显示最后多少条
查看容器内进程
docker top 容器ID
查看容器内部细节(容器内部的信息,例如网络配置)
docker inspect 容器ID
进入正在运行的容器并以命令行交互
docker exec -it 容器ID bashShell 在容器内打开一个新的终端,启动一个新的进程,用exit退出,不会导致容器停止。 推荐使用
docker attach 容器ID 直接进入容器终端,不会有新的进程产生,用exit退出,会导致容器停止
从容器内拷贝文件到主机上
docker cp 容器ID:容器内路径 目的主机路径
例子 docker cp 容器ID:/usr/local/xu.txt /etc/x.txt
导入和导出容器
docker export 容器ID>文件名.tar 导出
cat 文件名.tar | docker import -镜像用户或者说是包名(随便命名)/镜像名:镜像版本
容器数据卷
将容器指定目录与挂载容器(主机)指定目录进行数据的共享
解决容器挂载没有权限的问题cannot open directory:Permission denied
--privileged=true
Dockerfile
Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。
docker容器启动错误
在Linux上如果容器因防火墙启动失败,关闭防火墙后,需要重启docker。
docker netword
docker和虚拟机一样有几种网络模式
compose
对docker构建的服务进行统一编排管理
portainer(轻量级)
对docker实例进行实时数据监控与统计
CAdvisor InfluxDB Granfana CIG
CAdvisor监控收集+InfluxDB存储数据+Granfana展示图标
docker容器实例进行监控(重量级)