docker使用
本文最后更新于27 天前,其中的信息可能已经过时,如有错误请发送邮件到2639131093@qq.com

docker

docker常用命令

容器生命周期管理
run                            - 创建并启动一个新的容器。
start/stop/restart             - 这些命令主要用于启动、停止和重启容器。
kill                           - 立即终止一个或多个正在运行的容器
rm                             - 于删除一个或多个已经停止的容器。
pause/unpause                  - 暂停和恢复容器中的所有进程。
create                         - 创建一个新的容器,但不会启动它。
exec                           - 在运行中的容器内执行一个新的命令。
rename                         - 重命名容器。


容器操作
ps                             - 列出 Docker 容器
inspect                        - 获取 Docker 对象(容器、镜像、卷、网络等)的详细信息。
top                            - 显示指定容器中的正在运行的进程。
attach                         - 允许用户附加到正在运行的容器并与其交互。
events                         - 获取 Docker 守护进程生成的事件。
logs                           - 获取和查看容器的日志输出。
wait                           - 允许用户等待容器停止并获取其退出代码。
export                         - 将容器的文件系统导出为 tar 归档文件。
port                           - 显示容器的端口映射信息。
stats                          - 实时显示 Docker 容器的资源使用情况。



容器的root文件系统(rootfs)命令
commit                         - 允许用户将容器的当前状态保存为新的 Docker 镜像。
cp                             - 用于在容器和宿主机之间复制文件或目录。
diff                           - 显示 Docker 容器文件系统的变更。



镜像仓库
login/logout                   - 管理 Docker 客户端与 Docker 注册表的身份验证。
pull                           - 从 Docker 注册表(例如 Docker Hub)中拉取(下载)镜像到本地。           
push                           - 将本地构建的 Docker 镜像推送(上传)到 Docker 注册表(如 Docker Hub 或私有注册表)。
search                         - 用于在 Docker Hub 或其他注册表中搜索镜像。
本地镜像管理
images                         - 列出本地的 Docker 镜像。
rmi                            - 删除不再需要的镜像。
tag                            - 创建本地镜像的别名(tag)。
build                          - 从 Dockerfile 构建 Docker 镜像。
history                        - 查看指定镜像的历史层信息。
save                           - 将一个或多个 Docker 镜像保存到一个 tar 归档文件中。
load                           - 从由 docker save 命令生成的 tar 文件中加载 Docker 镜像。
import                         - 从一个 tar 文件或 URL 导入容器快照,从而创建一个新的 Docker 镜像。




info|version
info                           - 显示 Docker 的系统级信息,包括当前的镜像和容器数量。
version                        - 显示 Docker 客户端和服务端的版本信息。
Docker Compose
docker compose run             - 启动一个新容器并运行一个特定的应用程序。
docker compose rm              - 启动一个新容器并删除一个特定的应用程序。
docker compose ps              - 从 docker compose 检查 docker 容器状态。
docker compose build           - 构建 docker compose 文件。
docker compose up              - 运行 docker compose 文件。
docker compose ls              - 列出 docker compose 服务。
docker compose start           - 启动 docker compose 文件创建的容器。
docker compose restart         - 重启 docker compose 文件创建的容器。



网络命令
docker network ls                                         -列出所有网络。
docker network create <network>                           -创建一个新的网络。
docker network rm <network>                               -删除指定的网络。
docker network connect <network> <container>              -连接容器到网络。
docker network disconnect <network> <container>           -断开容器与网络的连接。


卷命令
docker volume ls                                          -列出所有卷。
docker volume create <volume>                             -创建一个新的卷。
docker volume rm <volume>                                 -删除指定的卷。
docker volume inspect <volume>                            -显示卷的详细信息。                

harbor仓库测试

服务端

修改镜像加速文件 放行服务端

vi /etc/docker/daemon.json

{
  "registry-mirrors": [
"https://4a1qkm2x.mirror.aliyuncs.com",
"https://docker.1panel.live",
"https://hub.rat.dev"
],
"insecure-registries":["192.32.62.150:5000"]             ##添加放行服务端ip+端口              
} 

harbor部署:docker部署 – cuo的小窝

这里以mysql做测试,先给mysql镜像打标签

命令:

docker tag +镜像名称/ID  +ip:端口/harbor项目/项目目录镜像名称:版本

演示:

docker tag mysql  192.32.62.150:5000/library/mysql:latest

命令行登录harbor

docker login -u +用户名 -p +密码 +ip:端口

上传

docker push +ip:端口 +目录

服务端

更改镜像加速器 ,一样道理 放行客户端

登录harbor

pull其镜像

run一个

命令诠释

镜像命令

命令:docker search 镜像名 # 搜索镜像
命令:docker images # 查看所有本地的主机上的镜像
命令:docker pull 镜像名 [:tag]# 下载镜像,默认是下载最新版 latest 。
# 删除镜像  -f就是全部删除,后面的条件是根据什么来删除,这里是根据容器的id进行删除
docker  rmi -f  容器id   

# 删除多个镜像
docker  rmi -f  容器id  容器id 容器id    

# 删除所有的镜像 
docker  rmi -f $(docker images -aq)  

参数解释

REPOSITORY  :镜像的仓库源
TAG					 :镜像的标签
IMAGE ID		 :镜像的ID
CERATED		 :镜像的创建时间
SIZE				 :镜像的大小

docker  images  [可选项]
-a    , --all        # 列出所有镜像
-q	   , --quiet    # 只显示镜像的ID

容器命令

docker run  参数   image
参数说明:
--name="Name" : 容器名字 ,tomcat01、tomcat02,用来区分容器
-d :后台方式运行                                
-it:使用交互方式运行,进入容器查看内容
-p :指定容器的端口   -p  8080:8080  
        -p     ip:主机端口:容器端口                                
        -p     主机端口:容器端口(常用方式)
        -p     容器端口                                                     
        容器端口                                                             
-p: 随机指定端口   
命令:docker run -it centos /bin/bash #启动容器并进入
命令: ls # 查看容器内的centos,基础版本,很多命令都是不完善的
命令:docker ps [可选参数] # 列出当前正在运行的程序
-a             #列出当前正在运行的容器+带出历史运行过的容器
-n=?      #显示最近创建的容器  
-p            #只显示容器的编号
docker rm  容器id        # 删除指定的容器,不能删除正在运行的容器
docker rm -f $(docker ps -aq)       # 删除所有的容器   
docker ps -a -q|xargs docker rm     # 删除所有的容器
docker start 容器id                  # 启动容器
docker restart 容器id                # 重启容器
docker stop 容器id                   # 停止正在运行的容器
docker kill 容器id                   # 强制停止当前正在运行的容器 

其他命令
docker run -d 镜像名 容器后台启动

docker stats [容器id] 查看系统CPU状态

docker logs -tf –tail 容器 查看日志

-tf                  #显示日志
--tail number        #要显示日志条数 

例如:docker logs -tf --tail 10 容器id

正常 这里没有日志

docker top 容器id 查看容器进程

docker inspect 容器id 查看元数据 (常用来看ip)

进入正在运行的容器

docker exec -it 容器id bashShell
docker attach 容器id
  • docker exec: 进入容器后开启一个新的终端,可以在里面操作(常用)
  • docker attach:进入容器正在执行的终端,不会启动新的进程

docker数据卷

docker run -it -v 主机目录 : 容器内目录 使用命令挂载数据卷

容器内数据将和主机同步

以centos镜像为例 在 centos容器内创建文件 然后同步至主机/home下

查看卷挂载目录

具名挂载和匿名挂载

 # 如何锁定是具名挂载还是匿名挂载,还是指定路径挂载

 -v  容器内路径                    # 匿名挂载
 -v  卷名:容器内路径                # 具名挂载
 -v  /宿主机路径:容器内路径          #指定路径挂载

匿名挂载

通过【-v 容器内路径】 而没有指定卷名或者指定主机路径的挂载方式

具名挂载

通过【-v 卷名:容器内路径】 而没有指定主机路径的挂载方式

可看出来指定了容器目录 ,而主机目录默认存在/var/lib/dockervolumes下

扩展

# 通过 -v 容器内路径:ro    rw   改变读写权限
ro      readonly         # 只读
rw     readwrite        # 可读可写

# 一旦设置了容器权限,容器对我们挂载出咯哎的内容就会有限定了
docker run -d  -p --name  nginx02  -v  juming-nginx:/etc/nginx:ro  nginx
docker run -d  -p --name  nginx02  -v  juming-nginx:/etc/nginx:rw  nginx 

# ro 只要看到ro就说明这个路径只能通过宿主机来操作,容器内部是无法操作的。

dockerfile

Dockerfile的介绍
Dockerfile是用来构建dokcer镜像的文件,是一个命令参数脚本。
构建步骤∶

1、编写一个dockerfile文件
2、docker build构建成为一个镜像
3、docker run运行镜像
4、docker push发布镜像(DockerHub、阿里云镜像仓库)
很多官方的镜像都是基础包,很多功能都没有,我们通常会自己搭建自己的镜像。
官方既然可以制作镜像,那么我们也可以去构建自己的镜像。

注意:

  • 每个保留关键字(指令)都必须是大写字母;
  • 执行顺序是从上往下依次执行;
  • # 表示注释;
  • 每一个指令都会创建提交一个新的镜像层,并提交。

dockerfile指令

FROM:指定基础镜像,一切都是从这里开始构建
MAINTAINER:指定维护者信息【镜像是谁写的,姓名+邮箱】
RUN:镜像构建的时候需要运行的命令【你想要镜像做一些什么】
ADD:步骤,添加内容
WORKDIR:镜像的工作目录
VOLUME:挂载的目录
EXPOSE:保留端口配置
CMD:指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT:指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD:当构建一个被继承,DockerFile 这个时候就会运行 ONBUILD 的指令,触发指令
COPY:类似ADD,将我们文件拷贝到镜像中
ENV:构建的时候设置环境变量

案例

这里以以官方centos构建jdk为例,jdk版本为8u141

进入root家目录/home创建dockerfile目录

命令:vim mydockerfile-jdk

# 书写内容,正式构建不能带解释参数,这里起到诠释作用

FROM centos          指定基础镜像
MAINTAINER user      指定作者
RUN mkdir /usr/local/java  新建文件夹存放jdk文件
ADD jdk-8u141-linux-x64.tar.gz /usr/local/java/  将jdk复制到镜像内并解压
RUN ln -s /usr/local/java/jdk1.8.0_141 /usr/local/java/jdk   创建软连接让系统变量识别
ENV JAVA_HOME /usr/local/java/jdk            环境变量
ENV JRE_HOME ${JAVA_HOME}/jre
ENV CLASSPATH .:${JAVA_HOME}/lib:${JRE_HOME}/lib
ENV PATH ${JAVA_HOME}/bin:$PATH

通过文件构建镜像

docker build -f dockerfile文件路径 -t 镜像名:[tag]  构建后的路径

列出镜像变迁史

docker history image/ID

CMD 和 ENTRYPOINT区别

  • CMD: 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
  • ENTRYPOINT: 指定这个容器启动的时候要运行的命令,可以追加命令

创建测试文件对比:

cmd文件内容

运行

正常报错,因为 -l 代替了 ls -l

entrypoint文件内容

运行

正常 因为 entrypoint 是追加而不是代替 相当于此处运行 ls -al

docker网络

四种模式

  • bridge:桥接docker(默认,自己创建也使用bridge模式);
  • none:不配置网络;
  • host:和宿主机共享网络;
  • container:容器网络连通!(用的少,局限很大);

所有容器再不指定网络的情况下,都是docker0路由的,docker会给我们的容器分配一个默认的可用IP地址,此情况下的容器都是可以互ping的

Docker使用的是Linux的桥接模式,宿主机中是一个Docker容器的网桥docker0,所有东西都是经过这个docker0的,只要你启动一个容器,不指定一个网络它就会往docker0这里给你分配一个IP,最多能分配65535个。如果是容器之间需要通信,那么就通过Veth-pair给转发连接过去。核心就是利用了Linux的虚拟化网络技术,在容器内和Docker0分别创建了一个虚拟网卡,通过Veth-pair进行一个连接。

Docker中的所有网络接口都是虚拟的,这是因为虚拟的转发效率高,只要在一个容器内转发是非常快的。

只要容器删除,对应的网桥一对就没有了。

自定义网络

先查看网络列表

docker network ls

这里的harbor是我harbor仓库网络

桥接网络直接启动的命令 【--net bridge】,而这个就是docker0默认的启动方式

docker run -d -P --name tomcat01 tomcat
# 以上命令就相当于
docker run -d -P --name tomcat01 --net  bridge tomcat 

创建自定义网络

docker network create

–driver bridge # 桥接模式
–subnet 192.168.0.0/16 # 配制一个子网,65535个字段 192.168.0.2——192.168.255.255
–gateway 192.168.0.1 # 配制默认的路由网关
mynet #表示自定义的网络名

查看网络详情,即元数据

自定义网络互ping

run两个tomcat在自定义网络下进行互ping

通过查看元数据查看两容器的ip,这里展示直接从自定义网络元数据查看

互ping

正所谓在不同网段中,不同网络之中的容器是不能联通的,解决方法如下

docker network connect 网络1  另一个网络的容器

例如这里以自定义mynet 和bridge网络中的容器ping

以默认bridge网络创建容器

与centos1 互ping

失败

打通mynet网络和centos3

使用connect就是将centos3放到了mynet下,如果我们以后想要跨网络操作别人的容器,就需要使用docker network connect连通。

centos3内网络

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇