Docker

docker

疫情期间在家办公,docker搭建工作环境应用整理。很多也是来自简书和网络。这里给需要的人~

docker的宿主系统是centos,为什么可以运行ubuntu的镜像呢?

首先需要区分Linux内核与Linux发行版

    Linux内核是Linux操作系统的核心, 负责硬件管理, 比如管理内存、管理磁盘(文件系统)、管理CPU(进程)等等...

    Linux发行版是在Linux内核的基础上添加了一些工具软件,比如图形界面、函数库、软件包管理系统等等...

CentOS与Ubuntu是不同的Linux发行版, 它们都是基于Linux内核, 只是添加的工具软件不同。比如, 他们的软件包管理系统不同, CentOS使用yum命令安装软件, 而Ubuntu使用apt-get命令安装软件。

因此CentOS与Ubuntu的内核是相同的(版本可能不同), 只是所安装的软件不同, 即文件系统不同。

Docker容器技术是基于Linux内核实现的, 它主要用到了两个内核模块:

    Namespace: 用于容器的隔离, 例如PID Namespace使得容器中的进程无法感知宿主机以及其他容器中的进程。

    Cgroups: 用于容器的资源控制, 比如限制容器所使用的内存大小或者CPU个数。

在CentOS上运行基于Ubuntu镜像的容器时, 容器使用了CentOS主机的内核以及Ubuntu镜像, Ubuntu镜像中安装了Ubuntu的各种软件(apt-get)。

基础镜像

根据Dockerfile制作:

//www.greatytc.com/p/482aed037ac4

//Dockerfile制作镜像   入口点和CMD的区别,入口点可以携带docker run的参数, RUN 指令,用于运行程序,但二者运行的时间点不同;CMD 在docker run 时运行,而非docker build;

sudo docker build -t xxx/xxx:1.0 .      //制作命令,后面的.为当前Dockerfile所在目录

https://hub.docker.com///官方镜像web

https://blog.csdn.net/nklinsirui/article/details/80967677

docker 运行ubuntu镜像

https://www.cnblogs.com/lsgxeva/p/8746644.html

docker run ubuntu    /   docker pull ubuntu    //获取

docker run -i -t ubuntu /bin/bash    //运行

docker镜像没有ifconfig,ping

apt-get update

apt install net-tools       # ifconfig 

apt install iputils-ping     # ping

docker 制作新镜像

docker commit <container id> <image name>    

sudo docker commit 85074428a3dc ifconfig-ubuntu

把正在用的系统制作成镜像:

https://blog.csdn.net/tiantao2012/article/details/82425660

1.选定制作成镜像的系统

2.系统进行格式转化并压缩,执行如下命令,生成一个镜像的centos7-base.tar的文件

tar --numeric-owner --exclude=/proc --exclude=/sys -cvf centos7-base.tar /

3.docker import 导入   把镜像文件centos7-base.tar放到装有docker的系统上

docker import      centos7-base.tar         自定义images名字

4.docker images 查看后使用即可

docker run -it  --name    images名字        /bin/bash

docker镜像导出导入

$ sudo docker save -o /home/user/images/ubuntu_14.04.tar ubuntu:14.04  //导出

$ sudo docker load --input ubuntu_14.04.tar//导入

docker容器导入导出

docker export

docker import

docker import/export 和load/save 区别

docker save images_name:将一个镜像导出为文件,再使用docker load命令将文件导入为一个镜像,会保存该镜像的的所有历史记录。比docker export命令导出的文件大,很好理解,因为会保存镜像的所有历史记录。

docker export container_id:将一个容器导出为文件,再使用docker import命令将容器导入成为一个新的镜像,但是相比docker save命令,容器文件会丢失所有元数据和历史记录,仅保存容器当时的状态,相当于虚拟机快照。

docker与宿主机copy

1、从容器里面拷文件到宿主机?

     答:在宿主机里面执行以下命令

             docker cp 容器名:要拷贝的文件在容器里面的路径       要拷贝到宿主机的相应路径 

     示例: 假设容器名为testtomcat,要从容器里面拷贝的文件路为:/usr/local/tomcat/webapps/test/js/test.js,  现在要将test.js从容器里面拷到宿主机的/opt路径下面,那么命令应该怎么写呢?

     答案:在宿主机上面执行命令

docker cp testtomcat:/usr/local/tomcat/webapps/test/js/test.js /opt

2、从宿主机拷文件到容器里面

      答:在宿主机里面执行如下命令

              docker cp 要拷贝的文件路径 容器名:要拷贝到容器里面对应的路径

       示例:假设容器名为testtomcat,现在要将宿主机/opt/test.js文件拷贝到容器里面的/usr/local/tomcat/webapps/test/js路径下面,那么命令该怎么写呢?

       答案:在宿主机上面执行如下命令     

docker cp /opt/test.js testtomcat:/usr/local/tomcat/webapps/test/js

3.需要注意的是,不管容器有没有启动,拷贝命令都会生效。

docker pull的镜像保存在哪里?

https://www.cnblogs.com/Rightsec/p/10222950.html

https://blog.csdn.net/ncdx111/article/details/79878098//docker 本地镜像导入,导出

docker java镜像选型参考

https://blog.csdn.net/boling_cavalry/article/details/94320638

docker pull openjdk:8-jdk-slim

docker run...

docker run  Imageid     //根据image运行容器

docker ps  ;   docker ps -a    //查询容器,-a显示所有包括没有运行的容器

docker start 容器id   //启动已经exit的容器

docker exec -it 容器id bash  //bash 交互执行已经启动的容器,注意-it 的位置,如果不能执行,将-it放到前面

TIPs:退出时,使用[ctrl + D],这样会结束docker当前线程,容器结束,可以使用[ctrl + P + Q]退出而不终止容器运行  //持续运行

持续运行:

docker run -p 80:8090 -it -d xxx/xxx:1.2 /bin/bash   //这个方式会启动后台持续运行,记得加-d和/bin/bash运行

docker run -it imageid     //这个方式会有一个/bin/bash启动,因而docker start时会持续运行

docker start containerid  //启动

docker restart containerid  //重启

docker attach containerid  //附着

docker rm containerid  // 删除容器

docker rmi imageid       //删除image,-f 强制

docker run mysql

https://www.cnblogs.com/haoprogrammer/p/11008786.html

# docker pull mysql:5.7.26    //拉取mysql镜像

# docker run -p 3306:3306 --name mysql-5.7.26 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.26//启动mysql 容器

# docker exec -it mysql-5.7.26 bash //启动容器bash

mysql -uroot -p123456    //运行mysql

other ref:

docker run -p 13306:3306 --name my-mysql -v $PWD/conf:/etc/mysql -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.26

-v $PWD/conf:/etc/mysql将主机当前目录下的 conf/ 挂载到容器的 /etc/mysql       (conf目录为mysql的配置文件,不挂载也没问题)

docker mysql容器重启后数据会丢失,commit也不行,需要映射host目录,参考: 数据持久化:https://blog.csdn.net/weixin_39791387/article/details/93375560

docker container配置修改

docker container update --restart=always 容器名字 #更改restart项为always,经测试,这个配置支持os重启后自动启动

docker container update --restart=no   容器名字   #取消自动重启

docker维护

docker inspect 容器id  //查看容器的配置,如ip地址,端口等

docker中启动关闭删除所有的容器命令

docker中 启动所有的容器命令

dockerstart $(docker ps -a | awk'{ print$1}'| tail -n +2)

docker中 关闭所有的容器命令

dockerstop $(docker ps -a | awk'{ print$1}'| tail -n +2)

docker中 删除所有的容器命令            -f//强制

dockerrm $(docker ps -a | awk'{ print$1}'| tail -n +2)

docker中 删除所有的镜像  

dockerrmi $(docker images | awk'{print$3}'|tail -n +2)

tail -n +2 表示从第二行开始读取

docker构建多平台镜像

//www.greatytc.com/p/ff865a5a051b

docker日志

https://blog.csdn.net/warrior_0319/article/details/79713155

docker资源限制

https://blog.csdn.net/wuyundong123/article/details/103401930//ubuntu 开启资源限制

docker拷贝本地文件或者文件夹到容器

docker cp /home/xxx targetContainerId:/home/xxx

搭建本地镜像库

https://blog.csdn.net/tellmewhyto/article/details/80822188

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。