docker 笔记
容器的运用越来越重要,如果没有容器程序员会有一大堆麻烦问题,比如,部署一个网站在服务器上,需要大半天的时间。或者是服务出错了,很难检查出毛病。
docker是什么来着,它被称为一个容器,你可以认为它是运行在宿主机(物理机或者虚拟机)上的一个虚拟机,当我们一次性部署好所有的服务之后,就可以把容器打包成为一个镜像。下次再部署服务的时候,直接把这个镜像拿来用就可以了。那么就避免了重复部署的麻烦,那么这个镜像就是整个应用,可以理解为安卓手机的安装包,每次只要装一个安装包就可以了,不用关注过多内在软件都有什么
安装
centos
为例,其余系统可参考 https://docs.docker.com/desktop/install/linux-install/
- 首先卸载旧的版本,
docker
默认工作路径是/var/lib/docker
,需要删除残余文件,可将此文件删除
shell
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine \
docker-ce
- 安装docker 依赖的工具
shell
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2 --skip-broken
- 设置docker镜像源,一般是阿里云的,速度快一些
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
yum makecache fast
- 安装docker
yum install -y docker-ce
- 启动docker,无法启动可以先关闭防火墙试试,还是无法启动就是安装步骤有问题
sh
systemctl stop firewalld # 关闭
systemctl disable firewalld # 禁止开机启动防火墙
systemctl start docker # 启动docker服务
systemctl stop docker # 停止docker服务
systemctl restart docker # 重启docker服务
总结一些docker常用命令
镜像相关
- 搜索镜像
docker search mysql
- 下载镜像
docker pull 【镜像名称】
- 删除镜像
docker rmi -f【镜像名称/镜像ID】
强制删除所有
默认会到 hub.docker.com 下载镜像
国内网速可能慢一些,可以采用网易源、或者阿里源进行替换
用docker images
可以查看已经下载下来的镜像
- 镜像代理设置,创建或修改 /etc/docker/daemon.json 文件,修改为如下形式。
json
{
"registry-mirrors": [
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn",
"https://registry.docker-cn.com"
]
}
设置完重启 service docker restart
容器
- 运行容器
docker run -it REPOSITORY:TAG
REPOSITORY 是镜像名称
TAG是镜像的标签,一般表示为版本号
-i 交互式运行
-d 让容器在后台运行。
-P 将容器内部使用的网络端口映射到我们使用的主机上。
-- 主机端口:容器端口
-- 容器端口
如图所示:可执行 docker run -it centos /bin/bash
创建一个容器 ,加/bin/bash
会默认进入容器的交互式命令行
可以使用exit退出容器
docker run image
用镜像启动容器
-
进入容器
如果容器在后台运行,可以使用docker exec -it 775c7c9ee1e1 /bin/bash
进入容器,775c7c9ee1e1是容器的ID,/bin/bash
有时是/bin/sh
-
查询正在运行的容器ID
使用docker ps
查询容器信息
使用docker ps -a
查询所以容器信息
使用docker ps -aq
查询所以容器ID -
删除容器,id可以是很多个
docker rm 容器ID
docker rm -f 容器ID
强制删除容器
从容器内部复制文件
docker docker cp 【容器ID】:【文件路径】 主机路径
,必须在容器启动的时候执行
提交自己的镜像
git commit -a="镜像名称" -m="描述" 容器ID
挂在卷
可以把docker内部数据和linux主机上的数据实时同步,相当于备份,这样在docker销毁的过程中不至于数据丢失
指定路径挂载
docker run -v /home/testnginx:/home 5d58c024174d --name nginx02
-v 表示挂在卷, /home/testnginx 是主机上文件夹地址 /home 容器地址
挂载卷完成之后,可通过docker inspect 容器ID/名称
,查看卷的挂载情况
图中,Source
表示主机上映射的地址,Destination
表示目标输出地址
不指定路径挂载
- 匿名挂载, 只指定路径
docker run -d -v /etc/nginx --name nginx01 nginx
- 具名挂载,和指定路径挂载的区别是冒号前边名称例如:nginx01-volume,没有斜杠
docker run -d -v nginx01-volume:/etc/nginx --name nginx01 nginx
- 查询挂载的地址
docker volume ls
- 查询挂载详细信息
docker volume inspect nginx01-volume
- 指定读写模式
-v 名称:docker内部挂载点:ro/rw
ro 表示只读,rw 表示可读可写