docker的简单使用以及centos容器一点避坑

当前使用的系统版本为centos7.9,docker版本为19,docker容器为centos8.2(更新一下:8还是别用了,用7吧…)

docker安装教程见此处
修改docker镜像源,编辑/etc/docker/daemon.json写入

{
    "registry-mirrors":[
        "https://registry.docker-cn.com",
        "http://hub-mirror.c.163.com",
        "https://docker.mirrors.ustc.edu.cn"
    ]
}

查看本地镜像,依次为镜像名,版本,id,创建时间,大小

docker images

在这里插入图片描述
正常新装的本地仓是空的,拉取镜像,例拉取centos,一般拉取的为最新版本,版本号为latest,需要拉取指定版本在文件名后以冒号指定版本,如docker pull centos:6

docker pull centos

支持的版本在hub.docker.com搜索查看
在这里插入图片描述
删除一个镜像,docker中命令选择对象基本通用ID与NAME,如删除刚才pull的centos6镜像,执行docker rmi centos:6docker rmi d0957ffdf8a2效果同等。移除镜像需要先移除镜像创建的容器
与镜像操作相关不指定版本号默认使用latest

docker rmi <ID/名字:版本>

创建并启动一个容器

docker run -itd --name mongodb -e LANG="en_US.UTF-8" --privileged=true -v /sys/fs/cgroup:/sys/fs/cgroup -p 1234:27017 mongod:0.1 /usr/sbin/init

命令解释:
docker run为docker启动容器命令
-itd意为分配一个终端,打开输入交换(可以输入命令),在后台运行
--name指定容器名,可不使用
-e LANG="en_US.UTF-8"指定容器字符集,避免中文乱码
--privileged=true -v /sys/fs/cgroup:/sys/fs/cgroup联合使用,避免centos出现systemctl不能使用,以及启动应用出现进程问题,privileged为获取真实权限,-v为挂载宿主机文件。可不使用
-p用来指定端口映射,可多次指定,示例将主机的1234映射到了容器的27017。可不使用
mongod:0.1 /usr/sbin/init 使用mongod:0.1这个镜像,版本可不声明,不指定版本号默认使用latest。/usr/sbin/init为镜像启动以后执行的命令
docker的run其实类似于执行windows的bat或是linux的sh脚本,是一个执行完指定命令就退出的设定,上面使用的/usr/sbin/init是为了避免centos出现0号进程问题,替换为/bin/bash或者其他循环命令也可以使用,使用的命令如果非一直执行状态会导致容器自动退出

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime修改时区

查看已有的容器,依次为容器id,使用的镜像(run时写的镜像名这里就显示镜像名,写的ID就显示镜像ID),使用的命令,创建时间,状态,端口,容器名

docker ps -a

在这里插入图片描述
连接,停止,启动,移除容器(移除需要先停止)

docker exec -it <容器ID/名字> /bin/bash
docker stop <容器ID/名字>
docker start <容器ID/名字>
docker rm <容器ID/名字>

docker rm 1640d9cb4374docker exec -it mongodb /bin/bash
退出直接在容器内执行exit

文件/文件夹复制

docker cp <要复制的文件> <容器ID/名字>:<复制路径>

如将本机/home/downloads文件夹复制到容器内/home下docker cp /home/downloads mongodb:/home/反过来就是容器内复制到本机docker cp mongodb:/home/downloads /home

容器保存到本地镜像

docker commit  <容器ID/名字>  <镜像名:版本号>

例将现有容器名为sss的打包到镜像仓库,镜像名为test版本为1.23docker commit sss test:1.23
此功能额外说明,commit实际类似于svn/git一样的提交,会记录历史版本。例如新pull一个centos镜像,安装nginx后commit一次nginx:1.0,再安装mysql后commit一次mysql:1.0,他们的关系是myslq:1.0->nginx:1.0->centos,此时若想真正删除nginx:1.0则需要先删除mysql1.0

导入和导出
镜像导入导出

docker save  [镜像名:版本号] > [导出路径]
docker load < [导入路径]

例如

docker save centos-base > /home/centos-base.tar
docker load < /home/centos-base.tar

save和load成对使用,save针对的是镜像,也就是docker images列表的内容,save会包括历史版本,也就是上面所说的commit关系

容器导入和导出

docker export [容器ID/名字] > [导出路径]
docker import [导入路径]

例如

docker export 204166074aad >/home/centos-base.tar
docker import /home/centos-base.tar

export 和import 成对使用,export 导出是针对容器,只是将现在的容器打包,不包括历史,export 导出时需要注意需要容器正在运行状态,我实际测试容器停止状态下导出的文件导入无法使用,不知道是不是目前的bug
import 导入后名字和版本号都没有,使用tag进行命名

镜像重命名,根据ID对镜像名字和版本号进行修改

docker tag <镜像ID> <名字:版本号>

附:容器内乱码的处理

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值