docker入门(2)

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

进入容器内的方法

第一种方法:

# 如果是如下方法创建容器
[root@foundation25 kiosk]# docker run -d --name vm1 nginx
b4206bb51bf47b4154b0eb428de7e17811cff4c950203277fc13f58d5a22ec31
# 使用这个方法会进入失败的
[root@foundation25 kiosk]# docker container attach vm1

^C[root@foundation25 kiosk]#     # ctrl+c退出来
[root@foundation25 kiosk]# docker start vm1  # 重新开启容器
vm1
# 使用这个方法就可以进入容器了
[root@foundation25 kiosk]# docker container exec -it vm1 bash  
root@b4206bb51bf4:/# 
root@b4206bb51bf4:/# ls
bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  etc  lib   media  opt  root  sbin  sys  usr
root@b4206bb51bf4:/# exit

这里写图片描述
这里写图片描述
这里写图片描述
第二种方法:

# 如果是如下这种方法创建,直接进入容器
[root@foundation25 kiosk]# docker run -it --name vm2 nginx bash
root@7e2109f0be58:/# 
root@7e2109f0be58:/# 
root@7e2109f0be58:/# ls
bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  etc  lib   media  opt  root  sbin  sys  usr
root@7e2109f0be58:/# exit     
# 使用ctrl+d退出后需要再次开启,也可使用ctrl+pq退出,不需要再开启
[root@foundation25 kiosk]# docker start vm2
vm2
# 再次进入容器可以使用如下命令
[root@foundation25 kiosk]# docker container attach vm2
root@7e2109f0be58:/# 
root@7e2109f0be58:/# ls
bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  etc  lib   media  opt  root  sbin  sys  usr
root@7e2109f0be58:/# exit

这里写图片描述
这里写图片描述

Dockerfile文件整合

例:http与ssh

[root@foundation25 kiosk]# cd /tmp/docker/
[root@foundation25 docker]# ls
Dockerfile  dvd.repo  ssh  web
# 创建supervisor配置文件
[root@foundation25 docker]# vim supervisord.conf
[supervisord]
nodaemon=true

[program:sshd]
command=/usr/sbin/sshd -D

[program:httpd]
command=/usr/sbin/httpd

这里写图片描述

# 编写文件
[root@foundation25 docker]# vim Dockerfile 
FROM rhel7
ENV HOSTNAME server
EXPOSE 22 80
COPY dvd.repo /etc/yum.repos.d/dvd.repo
RUN rpmdb --rebuilddb && yum install -y httpd openssh-server openssh-clients supervisor && yum clean all && ssh-keygen -q -t rsa -f /etc/ssh/ssh_host_rsa_key -N "" && ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N "" && ssh-keygen -q -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N "" && echo root:redhat | chpasswd
COPY supervisord.conf /etc/supervisord.conf
CMD ["/usr/bin/supervisord"]

[root@foundation25 docker]# docker build -t rhel7:v3 .

这里写图片描述
这里写图片描述
.
.
中间省略。。。
.
.
这里写图片描述

[root@foundation25 docker]# docker run -d --name vm1 -v /tmp/docker/web/:/var/www/html rhel7:v3
# 测试
[root@foundation25 docker]# curl 172.17.0.2
www.redhat.org
[root@foundation25 docker]# ssh -l root 172.17.0.2

这里写图片描述
这里写图片描述
这里写图片描述

CMD 和ENTRYPOINT

区别:
CMD可以被覆盖
ENTRYPOINT不会被覆盖

CMD示例:

[root@foundation25 docker]# mkdir test
[root@foundation25 docker]# cd test/
[root@foundation25 test]# vim Dockerfile
FROM rhel7
CMD echo "hello world!"
[root@foundation25 test]# docker build -t rhel7:v4 .
# 测试
[root@foundation25 test]# docker run --rm rhel7:v4
hello world!
[root@foundation25 test]# docker run --rm rhel7:v4 echo 2018
2018

这里写图片描述
这里写图片描述
这里写图片描述
ENTRYPOINT示例:

[root@foundation25 test]# docker rmi rhel7:v4
[root@foundation25 test]# vim Dockerfile
FROM rhel7
ENTRYPOINT echo "hello world!"
[root@foundation25 test]# docker build -t rhel7:v4 .
# 测试
[root@foundation25 test]# docker run --rm rhel7:v4
hello world!
[root@foundation25 test]# docker run --rm rhel7:v4 echo 2018
hello world!

这里写图片描述
这里写图片描述
这里写图片描述
CMD 和ENTRYPOINT结合(只能用exec的方法)

[root@foundation25 test]# docker rmi rhel7:v4
[root@foundation25 test]# vim Dockerfile
FROM rhel7
ENTRYPOINT ["/bin/echo","hello"]
CMD ["world"]
[root@foundation25 test]# docker build -t rhel7:v4 .
# 测试
[root@foundation25 test]# docker run --rm rhel7:v4
hello world
[root@foundation25 test]# docker run --rm rhel7:v4 2018
hello 2018
[root@foundation25 test]# docker run --rm rhel7:v4 test
hello test

这里写图片描述
这里写图片描述
这里写图片描述
变量的引用
exec方式

[root@foundation25 test]# docker rmi rhel7:v4
[root@foundation25 test]# vim Dockerfile
FROM rhel7
ENV name redhat
ENTRYPOINT ["/bin/sh","-c","echo $name"]
[root@foundation25 test]# docker build -t rhel7:v4 .
# 测试
[root@foundation25 test]# docker run --rm rhel7:v4
redhat

这里写图片描述
这里写图片描述
这里写图片描述
shell方式

[root@foundation25 test]# docker rmi rhel7:v4
[root@foundation25 test]# vim Dockerfile
FROM rhel7
ENV name redhat
ENTRYPOINT echo "hello $name"
[root@foundation25 test]# docker build -t rhel7:v4 .
[root@foundation25 test]# docker run --rm rhel7:v4
hello redhat

这里写图片描述
这里写图片描述
这里写图片描述

权限问题

当出现如下权限问题

[root@foundation25 test]# docker run -it --name vm1 ubuntu
root@7f84b47272d2:/# ip addr
46: eth0@if47: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
root@7f84b47272d2:/# ip link set down eth0
RTNETLINK answers: Operation not permitted

这里写图片描述
解决方法:

# 加--privileged=true以超级用户身份运行
[root@foundation25 test]# docker run -it --name vm2 --privileged=true ubuntu
root@34db9fea4081:/# ip addr
48: eth0@if49: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
root@34db9fea4081:/# ip link set down eth0
root@34db9fea4081:/# ip addr
48: eth0@if49: <BROADCAST,MULTICAST> mtu 1500 qdisc noqueue state DOWN group default 
root@34db9fea4081:/# ip link set up eth0
root@34db9fea4081:/# ip addr
48: eth0@if49: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
root@34db9fea4081:/# id
uid=0(root) gid=0(root) groups=0(root)

这里写图片描述
这里写图片描述
这里写图片描述

内存限制

[root@foundation25 test]# docker run --rm -it --name vm3 -m 100M --memory-swap 100M stress --vm 1 --vm-bytes 90M

小于限定内存,程序会一直运行
这里写图片描述
中间省略。。。
这里写图片描述
可查看top
这里写图片描述
当大于 锁限定的内存,则会失败

[root@foundation25 test]#  docker run --rm -it --name vm3 -m 100M --memory-swap 100M stress --vm 1 --vm-bytes 110M

这里写图片描述
当没有定义–memory-swap的的大小时,默认为所定义-m大小的两倍,所以,超出-m大小一点点,还可以运行成功

[root@foundation25 test]# docker run --rm -it --name vm3 -m 100M stress --vm 1 --vm-bytes 110M

这里写图片描述
当大于等于它的两倍,则会失败

[root@foundation25 test]# docker run --rm -it --name vm3 -m 100M stress --vm 1 --vm-bytes 200M

这里写图片描述

cpu限制

查看cpu的个数

[root@foundation25 test]# lscpu

这里写图片描述
运行程序,设置其占用cpu个数为1,优先级为512

[root@foundation25 test]# docker run --rm -it --cpu-shares 512 stress -c 1

这里写图片描述
再打开一个shell
运行程序,设置其占用cpu个数为1,优先级为1024

[root@foundation25 test]# docker run --rm -it --cpu-shares 1024 stress -c 1

这里写图片描述
查看top,由于有四个cpu,完全足够分给两个,所以它们cpu都占100%
这里写图片描述
当每个占用4个cpu

[root@foundation25 test]# docker run --rm -it --cpu-shares 512 stress -c 4

这里写图片描述

[root@foundation25 test]# docker run --rm -it --cpu-shares 1024 stress -c 4

这里写图片描述
查看top,优先级为1024所占cpu为512的两倍
这里写图片描述

IO策略

[root@foundation25 ~]# docker run --rm -it --device-write-bps /dev/sda:10M ubuntu
root@0b7e69b93507:/# dd if=/dev/zero of=file bs=1M count=100
root@0b7e69b93507:/# dd if=/dev/zero of=file bs=1M count=100 oflag=direct

这里写图片描述

内存限制的底层操作

这里是用虚拟机做的
例:限制内存,使之只能运行memapp1,不能运行memapp2

# 安装此软件包(可以执行先yum search cgroup查询一下)
[root@server1 ~]# yum install libcgroup.x86_64 -y
[root@server1 ~]# /etc/init.d/cgconfig start
# 下载两个安装包 memapp1和memapp2
# 加可执行权限
[root@server1 ~]# chmod +x memapp*
[root@server1 ~]# ./memapp1
[root@server1 ~]# yum install -y /lib/ld-linux.so.2
[root@server1 ~]# ./memapp1
[root@server1 ~]# ./memapp2
# 更改配置文件
[root@server1 memory]# vim /etc/cgconfig.conf 
group x1 {
        memory {
               memory.limit_in_bytes = 17000000;
               memory.memsw.limit_in_bytes = 17000000;
       }
}
[root@server1 memory]# /etc/init.d/cgconfig restart
# 测试,cgexec -g memory:x1表示让配置文件里的x1内容生效
[root@server1 shm]# cgexec -g memory:x1 /root/memapp1
[root@server1 shm]# cgexec -g memory:x1 /root/memapp2

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
配置文件的内容,memapp1需要4096页,每页为4kb,所以内存限制在17000000b左右
这里写图片描述
测试:
这里写图片描述

用户限制

[root@server1 ~]# useradd test
[root@server1 ~]# mv memapp* /home/test/
[root@server1 ~]# vim /etc/cgrules.conf 
test:memapp1    memory            x1
test:memapp2    memory            x1
[root@server1 ~]# /etc/init.d/cgred start
# 测试
[root@server1 ~]# su - test
[test@server1 ~]$ ./memapp1
[test@server1 ~]$ ./memapp2

这里写图片描述
/eyc/cgrules.conf文件内容:
这里写图片描述
这里写图片描述

cpu限制的底层操作

[root@server1 ~]# vim /etc/cgconfig.conf 
group x2 {
        cpu {
              cpu.shares = 100;  # 限制到10%
        }
}
[root@server1 ~]# /etc/init.d/cgconfig restart
# 查看cpu个数
[root@server1 ~]# cd /sys/devices/system/cpu
[root@server1 cpu]# ls
# 测试
[root@server1 cpu]# cgexec -g cpu:x2 dd if=/dev/zero of=/dev/null &
[1] 1237
[root@server1 cpu]# top
[root@server1 cpu]# dd if=/dev/zero of=/dev/null &
[2] 1239
[root@server1 cpu]# top

这里写图片描述
配置文件内容:
这里写图片描述
测试:
有一个cpu足够分配给它,所以所占cpu几乎为100%
这里写图片描述
再开一个的时候,一个cpu要分配给两个,第一个就会被限制,只占10%(创建的时候,配置文件的cpu限制对第一个生效)
这里写图片描述

IO策略底层操作

[root@server1 cpu]# cd /cgroup/blkio/
[root@server1 blkio]# ll /dev/vda
[root@server1 ~]# vim /etc/cgconfig.conf 
[root@server1 ~]# /etc/init.d/cgconfig restart
group x3 {
        blkio {
               blkio.throttle.read_bps_device = "252:0 1000000"; #IO读取速度为1M/s
        }
}
# 测试
[root@server1 ~]# cgexec -g blkio:x3 dd if=/dev/vda of=/dev/null &
[3] 11648
[root@server1 ~]# yum install -y iotop
[root@server1 ~]# iotop

这里写图片描述
这里写图片描述
配置文件内容:
这里写图片描述
测试:
这里写图片描述
安装iotop
这里写图片描述
查看iotop
这里写图片描述

docker仓库

[root@foundation25 ~]# docker run -d -p 5000:5000 -v /opt/registry:/var/lib/registry registry:2
[root@foundation25 ~]# docker push localhost:5000/nginx
[root@foundation25 ~]# ls /opt/registry

这里写图片描述
这里写图片描述
这里写图片描述
私有仓库

[root@foundation25 ~]# cd /tmp/docker/
[root@foundation25 docker]# mkdir certs
[root@foundation25 docker]# cd certs/
[root@foundation25 certs]# ls
[root@foundation25 certs]# mv domains.crt domain.crt
[root@foundation25 certs]# cd ..
[root@foundation25 docker]# openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key -x509 -days 365 -out certs/domains.crt
[root@foundation25 docker]# docker run -d \
> --restart=always \
> --name registry \
> -v `pwd`/certs:/certs \
> -e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
> -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
> -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
> -p 443:443 \
> registry:2
[root@foundation25 certs]# docker ps

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

Docker:Window上的Boot2Docker安装和入门 最近在研究Devops,目前最热门的Docker先研究下,由于公司虚拟机申请IP麻烦,先在工作机器上安装一个Windows版本的。 Docker虽然是Linux内核,但是官方还是支持了Windows和OS X。 Boot2Docker官方下载地址:https://github.com/boot2docker/windows-installer/releases,目前最新发布版本是1.5.0.浏览 阅读详情

相关推荐

2Docker入门指南

本文是一篇Docker入门指南,详细介绍了在不同操作系统(包括Ubuntu、CentOS、OSX和Windows)上安装Docker的方法,并探讨了使用Vagrant、Boot2dockerDocker Machine等工具创建Docker主机的场景。此外,文章还涵盖了Docker的核心操作,如容器运行、镜像管理、网络配置和数据卷使用,并提供了常用命令总结和操作流程图。通过本文,读者可以快速掌握Docker的基础知识并应用于实际开发与运维工作中。

echo99的专栏 81

常用ip命令

linux ip 命令

macob的专栏 2004

linux 常用网络命令

转载自:redsuntim08 网址:http://blog.csdn.net/redsuntim/article/details/41144079 1. ifconfig ifconfig主要是能手动启动、观察和修改网络接口的相关参数,能修改的参数非常多,包括IP参数及MTU等都能修改,他的语法如下:  [root@linux ~]# ifconfig {interface} {

刻剑求舟 1640

RTNETLINK answers: Operation not permitted

如果出现:RTNETLINK answers: Operation not permitted,那是因为没有权限。 解决办法:su,输入root密码。 转载于:https://www.cnblogs.com/denggelin/p/6135378.html...

B1334628598的博客 1万+

【linux】ip命令

【代码】【linux】ip命令。

zc58778560的博客 1248

iproute使用详解

摘要 iproute2 是 Linux 系统中的现代网络管理工具集,用于替代传统的 net-tools(如 ifconfig、route)。其核心工具 ip 通过 Netlink 与内核交互,支持接口管理(ip link)、IP 地址配置(ip addr)、路由管理(ip route)、ARP 缓存操作(ip neigh)及网络命名空间(ip netns)。相比 net-tools,iproute2 语法统一、性能更优,并支持策略路由、VRF 等高级功能。典型操作包括:启用网卡(ip link set et

liulanba的博客 4073

docker pull 下载一半_宋宝华:Docker 最初的2小时(Docker入门入门)

本文系转载,著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。作者: 宋宝华来源: 微信公众号linux阅码场(id: linuxdev)最初的2小时,你会爱上Docker,对原理和使用流程有个最基本的理解,避免满世界无头苍蝇式找资料。本人反对暴风骤雨式多管齐下狂轰滥炸的学习方式,提倡迭代学习法,就是先知道怎么玩,有个感性认识,再深入学习高级用法,深层原理,一轮轮迭代。坚决反对一...

weixin_36000501的博客 96

Docker技术入门与实战(第2版)Docker技术入门与实战, 很适合初学者学习

image 下载地址...... 好书推荐、视频分享,公众号读书ReadBook与您一起进步,回复关键字 41219直接获取下载链接 内容简介 · · · · · · 本书从Docker基本原理开始,深入浅出地讲解Docker的构建与操作,内容系统全面,可帮助开发人员、运维人员快速部署Docker应用。本书分为四大部分:基础入门、实战案例、进...

每天都有新发现 3300

Docker 最初的2小时(Docker入门入门)

作者:宋宝华blog.csdn.net/21cnbao/article/details/56275456最初的2小时,你会爱上Docker,对原理和使用流程有个最基本的理...

架构师小秘圈 136

Docker 2】看完这篇,Docker你就入门

在计算机技术日新月异的今天,Docker在国内发展的如火如荼,特别是在一线互联网公司,Docker的使用是十分普遍的,在理解docker之前,我们先熟悉两个概念,容器和虚拟机。 一、容器与虚拟机 传统的虚拟机有VMware,VisualBox,它们需要模拟整台机器包括硬件,每台虚拟机都需要有自己的操作系统,虚拟机一旦开启,预分配给它们的资源将全部被占用。每一台虚拟机包括应用,必要的二进制和库...

学Java,找哪吒 4910

2.Docker入门Docker命令

1.Docker命令详解 菜鸟教程:Docker 命令大全 2.常见命令简介 # 如果不想记下面的指令,可以使用 docker --help # 查看所有docker指令 # docker常用指令 # 以下指令均需要以docker开头,如docker port port # 查看映射端口对应的容器内部源端口 pause # 暂停容器 ps # 展示容器列表 pull # 从docker镜像源服务器拉取指定镜像或者库镜像 push # 推送指定镜像或者库镜像至docker

桔子 761

Docker】WSL 2 上的 Docker 搭建和入门

关于Docker,可以找到很多教程,这里推荐《【狂神说Java】Docker最新超详细版教程通俗易懂。首先安装WSL,可以参考文章《【WSL】Windows下的Linux子系统使用方法指南。命令首先creates在指定映像上创建一个可写容器层,然后starts使用指定的命令。如果您的系统仅支持这两个选项之一,您将无法选择要使用的后端。安装成功后,选择**“关闭**”以完成安装过程。出现提示时,请确保选择或不选择“配置”页上的“,将显示下面的内容,内容与第一次不一样了。》,真的很细致,庖丁解牛。

kinghzking的专栏 2757

2Docker入门

它通过“容器(container)”将应用程序和所有依赖一并打包,变成一个“能跑的整体”,让软件具备了真正的“可移植(portable)、可扩展(scalable)、好管理(easy to manage)”的特性。不论你是刚入门,还是想继续精进,本文都会我们将动手搭建 Docker 环境,掌握基础命令,深入了解 Docker 镜像(image)、容器(container)与镜像仓库(registry)的底层逻辑;

2509_92130319的博客 646

docker 入门2

新建一个文件夹(如),里面创建Dockerfile(内容和之前给的一致)。打开 Docker Desktop,点击顶部的Build(构建)标签。点击,选择文件夹,镜像标签填,点击Build。Docker Desktop 会自动读取 Dockerfile 并构建镜像,完成后在Images中能看到。核心前提:先配置国内镜像加速器,解决网络解析 / 超时问题,这是拉取成功的关键。图形界面操作:通过Images标签搜索 → Pull 按钮,全程可视化,不用记命令。验证要点。

ZPC8210的博客 635

docker入门2-docker service

docker service介绍 service是生产环境中某个image的container集合。一个service只使用一个image,但它编排这个image的运行方式,比如使用哪个端口,根据需求运行多少份container。在docker stack负载均衡中,一个service中的所有container可能均匀的分布在多台虚拟机/物理机中,但它们共用一个端口,看起来就想是运行在一台机器中的...

weixin_34166472的博客 224

宋宝华 Docker 最初的2小时 Docker入门入门

宋宝华 Docker 最初的2小时 Docker入门入门

qq_43761905的博客 287

弃用Docker Desktop:在WSL2中玩转DockerDocker Engine 部署与WSL入门

本文介绍基于WSL2的基础用于,以及基于WSL2,部署Docker Engine,实验环境为Windiws11,部署Docker Engine的Linux为Ubuntu发行版本。

jclee95的个人博客 5939
上一篇: docker入门(1)
下一篇: docker入门(3)
lin_made
博客等级 码龄8年 45粉丝 69原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值