当前位置: 首页 > news >正文

1、docker常用操作

docker常用操作

  • 1、启动docker
  • 2.容器
    • 2.1创建容器
    • 2.2查看容器
    • 2.3启动容器
  • 3、镜像
    • 3.1查看镜像
    • 3.2创建镜像
  • 4、在宿主机和容器之间交换⽂件
  • 5、docker 容器之间通信
    • 5.1查看网络
    • 5.2创建网络
    • 5.3容器连接到网络
    • 5.4网络端口映射
    • 5.5Docker的跨主机网络访问

1、启动docker

参考:https://zhuanlan.zhihu.com/p/544310970
sudo systemctl status docker

sudo service docker status
启动(start)、停止(stop)、重启(restart)、查看状态(status)等。

2.容器

2.1创建容器

创建并运行
sudo docker run -it ubuntu:latest /bin/bash

创建不运行
sudo docker run -it -d alpine:latest

运行容器
sudo docker attach d74f2ceb5f3a

docker exec -it 容器id /bin/bash
docker exec -it mycontainer /bin/bash
docker exec 相当于进入容器并开启一个新的终端,可以在里面操作。
如果使用exit退出,容器也不会停止。
docker attach 进入容器正在执行的终端,不会启动新的进程。
如果使用exit退出,容器会停止运行!

创建并命名
sudo docker run -it -d --name ostechnix_alpine alpine:latest
sudo docker run -it --name name ubuntu:latest /bin/bash

docker exec 命令用于在正在运行的 Docker 容器中运行指定的命令。
docker exec [OPTIONS] CONTAINER COMMAND [ARG…]
其中,OPTIONS 可以省略,常用的选项如下:
-i:保持标准输入打开,使得可以与容器交互。
-t:分配一个伪终端,使得可以与容器交互。
CONTAINER 是要操作的容器的名称或 ID。
COMMAND 是要在容器内运行的命令。
ARG… 是命令的参数。
在名为 mycontainer 的容器中执行命令 /bin/bash 并分配一个伪终端:
docker exec -it mycontainer /bin/bash
在名为 mycontainer 的容器中执行命令 ls -l:
docker exec mycontainer ls -l

# 常用的参数
docker run -d -p  宿主机端口:容器端口 --name 容器名称 镜像的标识|镜像名称[tag]
# -d: 代表后台运行容器
# -p: 宿主机端口:容器端口: 为了映射当前Linux的端口和容器的端口
# --name 容器名称: 指定容器的名称

2.2查看容器

#查看运行
sudo docker ps
#列出所有可用的容器(运行或者停止)
sudo docker ps -a

2.3启动容器

启动start、重启restart、暂停pause 和终止容器stop
#名称或ID
sudo docker start modest_cray
sudo docker start 10615254bb45

容器脱离(不要退出)回到主机系统的 shell。不要终止或者关闭容器。使用 CTRL+P 然后 CTRL+Q 从容器中脱离,这样不会关闭容器。

删除容器
sudo docker rm 377e6d77ebb5

3、镜像

3.1查看镜像

sudo docker images
sudo docker search ubuntu
sudo docker pull ubuntu

3.2创建镜像

创建
sudo docker commit 377e6d77ebb5 ostechnix/ubuntu_apache
移除
sudo docker rmi ce5aa74a48f1

4、在宿主机和容器之间交换⽂件

在宿主机和容器之间相互COPY⽂件 cp的⽤法如下# 容器中 复制到 宿主机
docker cp [OPTIONS] CONTAINER:PATH LOCALPATH 
eg:docker cp  tomcat-8081:/usr/local/tomcat/webapps/ROOT/index.jsp /root/# 宿主机 复制到 容器中
docker cp [OPTIONS] LOCALPATH|- CONTAINER:PATH
eg:docker cp /root/index.html tomcat-8081:/usr/local/tomcat/webapps/ROOT/复制文件
将当前目录tpch文件夹复制到mysql容器相应的位置:
docker cp tpch mysql56:/var/lib/mysql #mysql56为容器名
容器文件拷贝到宿主机:
docker cp 容器名:要拷贝的文件在容器里面的路径 要拷贝到宿主机的相应路径

Docker数据卷
通过镜像创建一个容器。容器一旦被销毁,则容器内的数据将一并被删除。但有些情况下,通过服务器上传的图片出会丢失。容器中的数据不是持久化状态的。这个时候可以通过数据卷来解决这个问题。https://zhuanlan.zhihu.com/p/430652941

5、docker 容器之间通信

菜鸟:https://www.runoob.com/docker/docker-container-connection.html
https://www.cnblogs.com/makalochen/p/14242125.html#%E7%AE%80%E4%BB%8B
我们安装Docker后,它会自动创建三个网络,bridge(创建容器默认连接到此网络)、 none 、host。
host:容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。
None:该模式关闭了容器的网络功能,相当于一个回环网络。
Bridge:此模式会为每一个容器分配、设置IP等,并将容器连接到一个叫docker0的虚拟网桥,通过docker0网桥以及Iptables nat表配置与宿主机通信。
以哪种方式让服务器内部的容器与公网进行通信。
1、假如使用的是默认的桥接网络模式,启动容器的时候需要使用参数-p 宿主机端口:容器端口设置端口的映射。
2、假如使用的是host主机模式,因为使用的是宿主机的ip与端口,那就直接可以与公网通信。

查看IP:
ip安装apt-get update & apt-get install -y iproute2
ip addr 或 ip a
或用ifconfig

5.1查看网络

docker network ls
docker network inspect NETWORKID

5.2创建网络

链接:https://blog.csdn.net/longjuanfengzc/article/details/89340391
https://blog.csdn.net/u013355826/article/details/84987233
1.默认创建容器时默认连接的是bridge,其实可以创建容器时可以指定使用的网络,可以指定host、none甚至可以自己建一个bridge
docker network create -d bridge my-bridge

2.通过link,使用link相当于使用DNS记录(不推荐)
通过busybox创建一个容器名为test1
docker run -d --name test1 busybox /bin/sh -c “while true; do sleep 3600; done”
再用busybox创建一个容器名为test2,创建test2时使用了link链接了test1
docker run -d --name test2 --link test1 busybox /bin/sh -c “while true; do sleep 3600; done”

5.3容器连接到网络

将容器连接到网络
docker run --net= …
或者将已存在容器加入新的网络
docker network connect

创建时指定网络
docker network create -d bridge my-bridge

启动容器并指定模式
默认是Bridge
在容器启动命令时用参数–net=host指定当前容器网络模式
如: docker run -itd --net=host centos:7 /bin/bash

5.4网络端口映射

参考:https://cloud.tencent.com/developer/article/1831540
外网如何访问容器?
端口映射,-p指定对应端口
外网访问容器用到了docker-proxy和iptables DNAT

  • 宿主机访问本机容器使用的是iptables DNAT
  • 外部主机访问容器或容器之间的访问是docker-proxy实现

可以通过 -P 或 -p 参数来指定端口映射。
当使用 -P 标记时,Docker 会随机映射一个 49000~49900 的端口到内部容器开放的网络端口。
-p (小写的)可以指定要映射的端口,并且,在一个指定端口上只可以绑定一个容器。
docker run -d -P training/webapp python app.py
使用 hostPort:containerPort 格式本地的 5000 端口映射到容器的 5000 端口,可以执行
docker run -d -p 5000:5000 training/webapp python app.py

5.5Docker的跨主机网络访问

跨主机网络解决方案
docker原生的overlay和macvlan
第三方的flannel、weave、calico

相关文章:

  • iptables TEE模块测试小记
  • golang学习-结构体
  • What is `@ResponseBody` does?
  • 11 最小字符子串
  • 双目测距工程Stereo-Vision-master学习笔记
  • ElasticSearch扫盲概念篇[ES系列] - 第500篇
  • Scrum的工件
  • vlc播放rtsp视频流
  • Node.js基础知识点(四)
  • Python - Bert-VITS2 语音推理服务部署
  • 【第七在线】打破传统束缚:智能商品计划助力服装企业创新发展
  • Go新项目-为何选Gin框架?(0)
  • 【贪心】数组大小减半
  • MySQL基础笔记(6)函数
  • 第一章 通信职业道德
  • 2017 前端面试准备 - 收藏集 - 掘金
  • Android开源项目规范总结
  • CSS 提示工具(Tooltip)
  • js ES6 求数组的交集,并集,还有差集
  • js数组之filter
  • Leetcode 27 Remove Element
  • oldjun 检测网站的经验
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 服务器从安装到部署全过程(二)
  • 十年未变!安全,谁之责?(下)
  • 微信开放平台全网发布【失败】的几点排查方法
  • Java性能优化之JVM GC(垃圾回收机制)
  • 数据库巡检项
  • ​【已解决】npm install​卡主不动的情况
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #ifdef 的技巧用法
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • (bean配置类的注解开发)学习Spring的第十三天
  • (C#)获取字符编码的类
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (Forward) Music Player: From UI Proposal to Code
  • (二)pulsar安装在独立的docker中,python测试
  • (二)springcloud实战之config配置中心
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (转)ObjectiveC 深浅拷贝学习
  • (转)大型网站架构演变和知识体系
  • (转)人的集合论——移山之道
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .Net程序帮助文档制作
  • .Net接口调试与案例
  • .NET企业级应用架构设计系列之技术选型
  • @Tag和@Operation标签失效问题。SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成
  • [ 数据结构 - C++] AVL树原理及实现
  • [145] 二叉树的后序遍历 js
  • [C#]使用DlibDotNet人脸检测人脸68特征点识别人脸5特征点识别人脸对齐人脸比对FaceMesh
  • [CUDA 学习笔记] CUDA kernel 的 grid_size 和 block_size 选择
  • [docker] Docker容器服务更新与发现之consul
  • [ESP32 IDF]web server
  • [IE编程] WebBrowser控件中设置页面的缩放
  • [LeetCode] 196. 删除重复的电子邮箱