docker 笔记

docker容器
2023-09-20 16:22:15

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可以查看已经下载下来的镜像

docker images
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 表示可读可写