Docker
开源应用容器引擎,go语言
作用:打包应用到一个容器,随时一波带走
优势:沙箱机制(虚拟系统程序,运行程序都是独立的,不会对现有系统产生影响),开销低
docker架构
三个基本概念
镜像:image,root文件系统
容器:镜像和容器===类似于===面向对象类和实例,镜像是静态的,容器是实体对象,可以被创建,启动,停止,删除,暂停
仓库:保存镜像
但是目前podman是比较流行
podman
podman是开源容器运行的项目
比docker的优势:不需要运行任何守护进程
没有root权限也可以运行
介绍一下再linux系统下的安装:
1、podman 终端执行,检测是否有此命令
2、如果没有,执行:yum install podman
3、查看podman容器运行状态列表:podman ps -a (加上a会显示pause)
4、查看podman镜像列表:podman images
5、运行一个容器:
podman run -i -d -p 80:80 -v /data/:/data/ --privileged --name mytest centos:7.3.1611 /usr/sbin/init
-i: 允许你对容器进行交互
-d: 后台运行 不会进入容器
-p 端口号,左侧服务器指向:右侧容器内端口号,服务器端口不能重复,如果多个容器多个应用,需要nginx反响代理
-v 文件存储,左侧为映射到本地:右侧为容器内文件夹,防止镜像过大,迁移困难
--privileged: 和最后的参数/usr/sbin/init共同使用 才会有更高的权限控制
--name: 自定义容器启动的名称
centos:7.3.1611: 镜像名称 如果本地没有 会从网络上下载
也可以加入其它的参数 如-m 8G --cpus="4"
-m 8G :内存分配为8G
--cpus="4": 分配cpu核心总数为4
6、进入容器:
podman exec -i -t 7f5d968e2cf2 /bin/bash
-i: 允许你对容器进行交互
-t: 在新容器内指定一个伪终端或终端
243c32535da7:容器id可以用podman ps -a查看 也可以用名称代替
7、容器如果是挺值得,开启命令podman start mytest(容器名称)
8、停止运行中的容器,podman stop mytest(容器名称)
9.修改运行的参数 直接是不能修改运行的参数的 所以启动前要想好加入什么样的参数 如果一定要修改 可以先提交出一个容器为一个镜像 podman commit A B
A为容器名称 B为生成的镜像名称 然后重新执行第5步骤 注意如果容器过大这步会导致所有podman命令不能执行 不能进入其他容器 但容器内部运行正常
建议没有其他人操作时这样处理 如果着急执行那就先导出容器 再导入 这个过程前期只会导致podman ps不能执行 最后Storing signatures的过程会和commit效果一样 但时间相较短 10几分钟左右 建议项目目录映射出来 这样容器不会过大
10.删除一个容器 podman rm mytest 最后的参数为容器名称也可以容器id 加-f参数为强制执行 加-f之前一定要观察好正常不能删除报的是什么错
11.删除一个镜像 podman rmi 7f5d968e2cf2最后的参数为镜像id号 可以用podman images查看
12.导出一个压缩镜像 podman save mytest | gzip > mytest.tar.gz
13.导入一个压缩镜像 gunzip -c mytest.tar.gz | podman load
14.导出一个容器podman export mytest > mytest.tar 压缩导出 podman export mytest | gzip> mytest.tar.gz
15.导入一个容器cat mytest.tar | podman import - mytest
更多参考菜鸟教程:https://www.runoob.com/docker/docker-tutorial.html
进入容器遇到的问题(待更新):
如果系统语言出现乱码
【centOS7:https://www.cnblogs.com/djlsunshine/p/11282867.html
vi ~/.bashrc
添加:source /etc/profile 进行固化】
1.如果vim打开文件 中文乱码
cat << EOF > /root/.vimrc
:set encoding=utf-8
:set fileencodings=ucs-bom,utf-8,cp936
:set fileencoding=gb2312
:set termencoding=utf-8
EOF
2.如果系统语言出现乱码
解决方法如下
编辑 locale 配置文件,将 LANG=zh_CN.UTF8 改为 LANG=en_US.UTF8 后保存
# vi /etc/locale.conf
LANG=zh_CN.UTF8
# vi /etc/environment
添加两行内容
LANG=zh_CN.utf-8
LC_ALL=
在运行命令
# source /etc/environment
# localedef -v -c -i en_US -f UTF-8 en_US.UTF-8
如果最后一步可能会报错 不用管
如果还没有改变编码 执行yum install langpacks-zh_CN.noarch
3.容器中时间差了8个小时
podman cp /etc/localtime 容器id:/etc/localtime
前提是服务器时间正常 可以用date命令查看时间
4.容器中的系统目录无颜色
podman cp /etc/profile.d/colorls.sh 容器id:/etc/profile.d/colorls.sh
podman cp /etc/DIR_COLORS 容器id:/etc/DIR_COLORS
进入容器中 source /etc/profile.d/colorls.sh
5.screen中文乱码
进入screen加入-U参数 前提条件是系统中文不乱码参见第2步