Docker复习笔记

Centos7安装Docker

Docker官网:www.docker.com

Docker官网仓库:hub.docker.com

Docker文档是比较详细的

安装相关依赖

yum -y install gcc gcc-c++

yum install -y yum-utils

设置docker镜像仓库

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 这个是官网的

下面这个是设置成阿里云镜像(我这里安装的是上面这个官网的)

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

更新yum软件包索引(这个我没有执行)

yum makecache fast

安装Dcoker引擎

yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Docker常用命令

启动Docker引擎

systemctl start docker 启动docker

systemctl is-enabled docker 查看Docker是否自动启动

systemctl enable docker 设置Docker自动启动

systemctl restart docker 重启docker

systemctl stop docker 停止docker

systemctl disable docker 取消自动启动

systemctl status docker 查看docker状态

docker version 查看版本

docker info 查看概要

docker --help 帮助文档

docker 具体命令 --help 查看具体命令的帮助文档

Docker的HelloWorld

docker run hello-world

卸载Docker引擎

停止docker引擎

systemctl stop docker

yum remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras

删除存储镜像、容器和其他相关数据

rm -rf /var/lib/docker

删除Docker引擎相关数据

rm -rf /var/lib/containerd

阿里云镜像加速器设置

可以查看阿里云

可以使用上面的命令 也可以用vim直接创建并编辑

vim /etc/docker/daemon.json

让系统重新加载配置

systemctl daemon-reload

重启docker

systemctl restart docker

镜像和容器相关命令

docker images 列出本地所有镜像

docker search xxxx 远程仓库查看某个镜像

docker search --limit 5 redis 查看redis镜像排名前5个

docker pull xxx 下载某个镜像

docker pull centos:加版本号 :加版本号可以不加默认**:latest** 最新版

docker pull redis:6.0.8 下载指定版本镜像

docker pull ubuntu 下载最新版本ubuntu

docker images -a 查看历史所有镜像

docker images -q 或者 docker images -aq docker images -qa 三个一个意思 列出所有镜像ID

docker system df 查看镜像/容器/数据卷所占的空间

docker rmi 镜像名:版本/ID 删除某个镜像默认**:latest**最新版本

docker rmi -f 镜像名/ID 强制删除某个镜像默认**:latest**最新版本

docker rmi -f 镜像名/ID 镜像名/ID 镜像名/ID 强制删除多个

docker rmi -f $(docker images -qa) 强制删除所有镜像

面试题:什么是虚悬镜像 镜像的Repository和TAG 都是none的就是虚悬镜像 建议删除 有时docker出了某些问题会出现

运行容器相关命令

镜像是模板,容器好比一个个实例

docker pull ubuntu

此时不能再像hello-world那样直接 docker run ubuntu 它会直接退出

docker run -it --name myubuntu ubuntu 即使这样 默认也会带shell脚本

docker run -it --name myubuntu ubuntu /bin/bash

docker run -it --name myubuntu2 ubuntu /bin/sh

docker run -it --name=myubuntu ubuntu /bin/bash

docker run -it --name myubuntu ubuntu bash 四个命令都可以 -it表示启动伪终端交互 --name可以不指定,不指定就是系统分配 这样会直接进入容器终端

docker run -d --name myubuntu ubuntu 启动守护式容器 后台启动 但是这样会启动并直接停止容器 这里具体看情况 原因在于ubuntu内部没有执行什么应用,docker认为根本没用 就会自动关闭 但是对于比如说redis tomcat等等这样 容器启动后 会在后台运行 docker认为容器在干活不会自动关闭

docker run -it --name mynginx nginx /bin/bash 交互启动注意 直接进入交互 但是exit后会关闭容器 因此建议后台启动 或者用Ctrl+p+q 退出 这样不会关闭容器

如果ctrl+p+q退出后用****docker exec -it mynginx /bin/bash 重新进入 则用exit不会关闭容器

docker run -d -p 8080:8080 --name mytomcat tomcat 因为tomcat在内部运行不会自动关闭

此时如果直接exit 会退出并关闭(停止运行中)容器

可以按住Ctrl+p+q 来退出 容器继续运行

进入容器

docker exec -it nginx1 /bin/bash

docker exec -it nginx1 /bin/sh

docker top 容器id/容器名字 查看容器内运行的进程

docker inspect 容器ID/容器名字 查看容器内部运行细节

docker logs 容器ID/容器名字 查看日志

docker start 容器id或者容器名 启动运行过的容器

docker restart 容器id或者容器名 重启容器

docker stop 容器id或者容器名 停止容器

docker kill 容器id或者容器名 强制停止容器

docker rm 容器id或者容器名 删除已停止的容器

docker rm -f 容器id或者容器名 强制删除容器(包括运行中)

docker rm xxx xxx xxx可以删除多个容器

docker rm -f $(docker ps -aq) 强制删除所有停止和运行中的容器

docker rmi xxxx 删除镜像

docker rmi xxx xxx xxx

docker ps 列出所有运行的容器

docker ps -a 列出所有运行中和运行过的容器

docker ps -q 列出在运行的容器的id

两个进入容器的命令

docker attach 容器Id/容器名 直接进入容器启动命令终端,不会启动新进程,用exit会导致容器停止

docker exec -it 容器id/容器名 /bin/bash 容器中打开的的终端,可以启动新的进程,用exit不会导致容器停止 推荐使用docker exec -it 容器id/容器名 /bin/bash

从容器内拷贝文件到宿主机

docker cp 容器id/容器名字:容器内路径 目的宿主机路径 (在宿主机操作,无论容器有没有运行都可以复制)

例如

docker cp mycentos1:/a.txt /a.txt
docker cp mycentos1:/a.txt /c.txt

导出整个镜像为tar归档文件到宿主机

该容器是否在运行中没有关系

在宿主机执行

docker export 容器ID/容器名字 > 新的名字.tar

docker export 容器ID/容器名字 > /usr/local/develop/新的名字.tar

导入tar归档文件为镜像

cat /usr/local/develop/xxxx.tar | docker import - 新的镜像名字:版本号 版本号可以不写

例如

cat /usr/local/develop/xxxx.tar | docker import - xxxxx:1.1

镜像提交到本地

下载的镜像里面可能没有某些命令工具,或者并不是你期望想要的,简单讲你可以自己添加功能保存到本地镜像

例如:我们将一个ubuntu镜像添加一个功能,提交到本地镜像

apt-get update

apt-get -y install vim

现在就可以使用了

保存好a.txt文件之后退出容器 ctrl+p+q(退出让容器继续运行) exit退出且容器停止运行

我们想把有vim功能的这个ubuntu镜像提交到本地

在宿主机

docker commit -m="提交的描述信息" -a="作者" 容器名或者ID 创建镜像的名字:版本号

docker commit -m="add vim" -a="hrui" myubuntu ubuntuvim:v1

本地镜像发布到阿里云

先创建命名空间,再创建镜像仓库

基本就是照着上面抄

docker tag ubuntuvim:v1(可以是id) xxxxxx/test:v1

docker push xxxxxx/hrui/test:v1

拉取也一样 跟着抄

镜像推送到私有仓库

下载镜像

docker pull registry

运行私有库Registry相当于本地有个私有的Docker hub(镜像仓库)

docker run -d -p 5000:5000 -v /usr/local/develop/registry:/tmp/registry --privileged=true --name myregistry registry

-d:后台启动

-p 5000:5000 宿主机5000端口对应容器5000端口

-v /usr/local/develop/registry:/tmp/registry 容器卷绑定 如果不写 默认仓库被创建在容器的/var/lib/registry目录下 建议自行用容器卷映射

--privileged=true 权限给与容器相当于宿主机全部权限

此时进入容器docker exec -it myregistry /bin/bash不可用 因为容器缩小了 很多找不到

docker exec -it myregistry /bin/sh 这种在绝大多数时候是可用的

后台启动用docker exec -it myregistry /bin/sh进去 可以使用exit退出和CTRL+P+Q退出 都不会停止容器

这样私服镜像仓库就搭建完成了

可以用

curl -XGET http://IP地址:5000/v2/_catalog

私服默认不接受http请求

vim /etc/docker/daemon.json

"insecure-registries": ["IP地址:5000"]

重启docker引擎

systemctl restart docker

重启镜像仓库容器

docker start myregistry

可以用命令

docker tag 镜像id/或镜像名:版本号 ip地址:5000/镜像名:版本号 进行推送

docker tag centos localhost:5000/mycentos:v1

docker push localhost:5000/mycentos:v1 推送

docker pull localhost:5000/mycentos:v1 拉取

关于设置密码 另外查

容器卷相关

docker run -it --privileged=true -v /usr/local/develop/ubuntu:/tmp/docker_data --name=u1 ubuntu

注意这里用 -it启动 原因是用-d后台启动的话,docker任务ubuntu内部没有可以执行的东西,自动会关闭, 这和redis tomcat等有区别 redis tomcat等启动后内部有任务在执行

-v /usr/local/develop/ubuntu:/tmp/docker_data 这样宿主机和容器内部就相关联

宿主机

宿主机对应目录做了什么文件操作 相应的容器内对应目录也会同步

docker inspect 容器ID/容器名字 可以看详情

docker run -it --privileged=true -v /usr/local/develop/ubuntu:/tmp/docker_data --name=u1 ubuntu****这种写法其实

docker run -it --privileged=true -v /usr/local/develop/ubuntu:/tmp/docker_data:rw--name=u1 ubuntu

这个:rw是默认加上去了 就是说容器可以对该**/tmp/docker_data目录下进行读写操作**

如果是docker run -it --privileged=true -v /usr/local/develop/ubuntu:/tmp/docker_data:ro--name=u1 ubuntu 这样的话就是容器对/tmp/docker_data只有读操作没有写操作

限制的是容器 宿主机不会被限制

容器卷的继承

比如说docker run -it --privileged=true -v /usr/local/develop/ubuntu:/tmp/docker_data --name=u1 ubuntu

现在又有个u2

docker run -it --privileged=true --volumes-from 父类 --name=u2 ubuntu

docker run -it --privileged=true --volumes-from u1 --name=u2 ubuntu

也就是说 u2复用了 u1的容器卷规则

相关推荐
陈大爷(有低保)7 分钟前
UDP Socket聊天室(Java)
java·网络协议·udp
kinlon.liu20 分钟前
零信任安全架构--持续验证
java·安全·安全架构·mfa·持续验证
NiNg_1_23436 分钟前
使用Docker Compose一键部署
运维·docker·容器
萠哥啥都行41 分钟前
Linux安装Docker以及Docker入门操作
运维·docker·容器
王哲晓41 分钟前
Linux通过yum安装Docker
java·linux·docker
java6666688881 小时前
如何在Java中实现高效的对象映射:Dozer与MapStruct的比较与优化
java·开发语言
Violet永存1 小时前
源码分析:LinkedList
java·开发语言
执键行天涯1 小时前
【经验帖】JAVA中同方法,两次调用Mybatis,一次更新,一次查询,同一事务,第一次修改对第二次的可见性如何
java·数据库·mybatis
Jarlen1 小时前
将本地离线Jar包上传到Maven远程私库上,供项目编译使用
java·maven·jar
蓑 羽1 小时前
力扣438 找到字符串中所有字母异位词 Java版本
java·算法·leetcode