掌握docker这几招,你也能搞云计算了

news/2024/10/17 13:34:50/

Docker的好处

容器技术出现十多年了,已经在测试和生产环境得到普遍应用。几个好处:

  • 便携性、隔离性
  • 封装性,可复用
  • 方便做集群部署和资源调度

    所谓云计算,就是所有计算、服务、产品都云化,部署在云上,你只管使用就行,不用操心它怎么部署。怎么云化?虚拟化和docker化嘛。那还不会docker的小伙伴们还不赶紧普及一下docker。
    下面是本人以前记录的笔记,很基础,现在搬到CSDN上,也算是上云了吧。

玩转docker的基础几招

1. 构建一个docker镜像

只需要当前目录下存在Dockerfile文件即可:

docker build -t cms/python-docker:v1 . 

2. 运行一个容器

根据已知镜像,拉起一个新的容器:

docker run -d --name cmspy -v /dev/shm:/dev/shm -p 9080:80 -v /opt/CMS:/opt/CMS cms/python-docker:v1
  • -d: 以daemon方式运行,执行完后容器不退出
  • -p 和 -v 两个参数要记牢,都是宿主到容器的映射,一个是端口,一个是卷

3. 进入一个容器

一个容器运行起来后,我们要钻进去看个究竟,就用下面的命令:

docker exec -it <容器ID或名称> bash

docker exec 是一个有用的命令,完整了解一下:

docker exec

docker exec [OPTIONS] container_name COMMAND [ARG...]
OPTIONS说明:-d,以后台方式执行命令;
-e,设置环境变量
-i,交互模式
-t,设置TTY
-u,用户名或UID,例如myuser:myusergroup

例子:

sudo docker exec myContainer bash -c "cd /home/myuser/myproject && git fetch ssh://gerrit_server:29418/myparent/myproject ${GERRIT_REFSPEC} && git checkout FETCH_HEAD";
sudo docker exec myContainer bash -c "cd /home/myuser/myproject;git fetch ssh://gerrit_server:29418/myparent/myproject ${GERRIT_REFSPEC};git checkout FETCH_HEAD";

再免费赠送实际场景中的一个例子,例如我在Jenkins中每天自动运行远程服务器上容器中的脚本:

## 先拉最新代码
ssh -p 22 liu@111.112.235.88 "sudo docker exec -u liuhu cmspy bash -c 'cd /home/liuhu/cmspy && git pull origin master'"
## 再重启进程
ssh -p 22 liu@111.112.235.88 "sudo docker exec cmspy bash -c 'supervisorctl restart cmspy-crawler'"

这两条命令放在Jenkin的job脚本中,助你成功。

4. docker cp

容器宕掉了,重启也失败,咋办?
遇到这种情况,是不是窝火?不要紧,两招救你。
一、把相应文件拷到宿主机上

docker cp <containerID>:/xxx/xxx .

改巴改巴再拷进去:

docker cp yourfile <containerID>:/xxx/xxx/yourfile

文件和目录都可以采用这种方式随意copy进出

二、上述办法还不奏效,那说明容器的启动文件有问题,那就把启动文件copy出来,修改,在启动脚本第一行,加上

sleep 9999999

如果是别的语言的脚本,也如法炮制。sleep机制总归是有的。
copy回去,再重启就不会退出了。

5. 容器备份和导出

保存容器为镜像:

docker commit -a "my first commit" -m "headful chrome docker" d479afb70a20 cms/headful-chrome:v2

容器导出:

docker export 7691a814370e > ubuntu.tar

容器导入:

cat ubuntu.tar | docker import - test/ubuntu:v1.0

6. 查看命令

查看所有镜像:

docker images

查看所有容器:

docker ps -a

查看某个镜像和容器:

docker inspect <镜像或容器的ID或名称> 

7. 删除

删除镜像:
docker rmi <镜像ID>
删除容器
docker rm <容器ID>

其它

镜像重命名:

docker tag OldName:tag NewName:tag

容器重命名:

docker rename OldName:tag NewName:tag

网络问题

查看桥接模式下的所有网络:

docker network inspect bridge

..."f9575d8c4f6070da8b9fbb8c2524ae4837c12a94ac0310dde7c93daf3337c6c6": {"Name": "k8s_POD_grafana-55f67dc7c8-9d5vf_prophet_971f0f71-31fa-47f9-857a-b7e6ddca95be_2","EndpointID": "3cc3a6caba59e5e21953fcbfc23e1a265b9adfb5dfae13ae15ca7582246a58f9","MacAddress": "02:42:0a:f4:c0:0d","IPv4Address": "10.244.192.13/21","IPv6Address": ""},"fce7b55b783031bb7b21e663d079c8fc01cb8fbe0c6a5b51aaef55c09680e781": {"Name": "k8s_POD_abtest-manager-6d897df946-ql2g8_prophet_1ed95389-fed8-4d89-9c02-331b689edb74_2","EndpointID": "c8781810bef94fd63bb8dd63c80f1a0b6b7fef38a5dea1cf486ab7a6f11196fd","MacAddress": "02:42:0a:f4:c0:1d","IPv4Address": "10.244.192.29/21","IPv6Address": ""},"fd47a419724609ae922a6743487eca3a2c965b8260f8b882899a44970e68d93c": {"Name": "k8s_POD_mysql-master-6d9749bc5c-pdwjr_prophet_daab0220-2c50-4877-93f3-5593b80b1a33_2","EndpointID": "ebaa346ed71e9e6a8d938fd899e2baee1671dfeb2e1415ee2379d44c93bcadeb","MacAddress": "02:42:0a:f4:c0:13","IPv4Address": "10.244.192.19/21","IPv6Address": ""}...

可以看到每个容器分配的IP地址,这些IP地址在同一个网段,正常情况下容器之间按照这个分配的IP访问即可。宿主机的主机号默认为1, 即 10.244.192.1

同一宿主机上不同docker容器的通信

link方式

docker network ls

–link im_mysql:local_mysql

docker network create -d bridge network1
在两个容器中:

docker network connect network1 container1
docker network connect network1 container2
然后,在其中一个容器中ping另一个容器,测试是否能连通:
ping container2

常见问题

重启容器服务

如果服务器上需要这样的重启功能,可以有两种方法进行设置:
1.容器还没有创建,在运行容器的时候加入–restart=always参数
docker run -id --restart=always -p 9999:9999 -v xxxx:xxxx 镜像名称:tag
1
2.容器已经运行的情况,运行以下命令:
docker update --restart=always 容器名字或者容器ID
1
想立即生效就重启docker systemctl restart docker, 不然就等到它下次重启自动生效

其他:如果想停止自动启动,运行以下命令:
docker update --restart=no 容器名字或者容器ID

容器资源监控

CPU占用前五名:

docker stats --no-stream|awk ‘{print $3," "$1,$2}’|sort -h |tail -n 5
内存占用前五名:
docker stats --no-stream|awk ’ {print $4," "$1,$2}’ |sort -h |tail -n 5


http://www.ppmy.cn/news/821.html

相关文章

01-go基础-06-切片(声明切片、初始化切片、切片赋值、切片长度、切片容量、空切片、append、copy)

文章目录1. 声明切片2. 初始化切片2.1 切片长度2.1.1 初始化指定长度的切片2.1.2 查看切片长度 len()2.2 切片容量2.2.1 初始化指定容量的切片2.2.2 查看切片长度 len()3 切片赋值3.1 直接赋值3.2 引用数组给切片赋值3.3 引用数组某区间给切片赋值3.3.1 从数组位置N个取到第M个…

【目标检测】Faster R-CNN论文代码复现过程解读(含源代码)

目录&#xff1a;Faster R-CNN论文代码复现过程解读Faster R-CNN代码使用说明书&#xff08;分享在github上&#xff09;一、代码的地址二、我的配置环境三、参数值文件下载四、VOC数据集下载五、模型训练步骤&#xff08;1&#xff09;训练VOC0712数据集1.数据集的准备2.数据集…

Android 11.0 设置默认8时区和默认24小时制

目录 1.概述 2.设置默认8时区和默认24小时制的核心类 3.设置默认8时区和默认24小时制的核

【日期时间的计算NSDate Objective-C语言】

一、计算时间 1.比如,什么时候用这个计算时间呢 NSDate *date = [NSDate new]; NSLog(@“%@”,date); 我们知道,这个时候,它打印的时间是什么时间,是不是当前的时间啊, 我想得到,在当前系统时间之后5000秒以后的时间 5000秒以后,在当前时间的基础之上, 这时候,…

AutoJs7打包薅羊毛时间版

AutoJs7打包薅羊毛时间版 一、准备工作&#xff1a; autojs7 app 下载地址&#xff1a;Auto.js Pro7.apk - 蓝奏云薅羊毛时间版 下载地址&#xff1a; 亚丁号---文件下载 安卓手机一部外加数据线&#xff08; Type-C或者USB&#xff09;&#xff0c;最好是安卓7的系统。电脑…

Unity 如何实现框选游戏战斗单位

文章目录&#x1f354; Preface✨ 如何在屏幕坐标系内绘制框选框&#x1f389; 根据框选范围定位其在世界坐标系中对应的区域&#x1f947; 在该区域内进行物理检测&#x1f354; Preface 本文简单介绍如何实现即时战略游戏中框选战斗单位的功能&#xff0c;如图所示&#xff…

Mybatis入门

详细的Mybatis介绍/使用&#xff0c;可以访问&#xff1a; 地址&#xff1a;mybatis – MyBatis 3 | 简介 目录 一、Mybatis介绍 二、依赖 三、什么是rowmapper 四、Mybatis demo 演示 4.1 背景 4.2 JDBC执行sql的流程 &Mybatis 关键要素 4.3 项目的整体结构&…

第二十章《Java Swing》第5节:常用组件

窗体上的按钮、标签、文本框等都被称为“窗体组件”,简称“组件”。大部分组件都是Jcomponent类的子类,而Jcomponent又是Container的子类、Container又是Component的子类。这3个类中所定义的方法都会都会被组件各种组件继承下来,因此大部分组件都有相同的方法,这些方法如表…