2024年最新Docker容器管理_docker 容器管理(2),2024年最新338页网易物联网嵌入式开发面试真题解析火爆全网

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
img
img

如果你需要这些资料,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4cf61416ee67 nginx “/docker-entrypoint.…” 7 minutes ago Up 6 seconds 0.0.0.0:8080->80/tcp, :::8080->80/tcp nginx1


#### 重启容器


使用命令:"docker restart {容器ID|容器名称}"来重启容器


#### 进入容器


使用命令:“docker exec -it {容器ID|容器名称} /bin/sh"来进入容器,后面”/bin/sh"是指定进入容器时用的终端,如果容器内有其他的可以自行修改



[root@docker ~]# docker exec -it nginx1 /bin/sh

exit

[root@docker ~]# docker exec -it nginx1 /bin/bash
root@4cf61416ee67:/# ls
bin boot dev docker-entrypoint.d docker-entrypoint.sh etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@4cf61416ee67:/# exit
exit


#### 容器删除


使用命令:"docker rm {容器ID|容器名称}"来删除已经关闭的容器,如果容器在运行中想要强制删除可以加’-f’参数进行强制删除



[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4cf61416ee67 nginx “/docker-entrypoint.…” 15 minutes ago Up 7 minutes 0.0.0.0:8080->80/tcp, :::8080->80/tcp nginx1
[root@docker ~]# docker rm -f nginx1
nginx1
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES


#### 容器日志


使用命令:"docker logs {容器ID|容器名称}"来查看容器运行时的日志



[root@docker ~]# docker run -p 8081:80 -d --name myweb nginx
497eff031c03927f17fe14fcff49bea832403687d580294c42f9cfba697a1564
[root@docker ~]# docker logs myweb
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2022/05/02 05:30:57 [notice] 1#1: using the “epoll” event method
2022/05/02 05:30:57 [notice] 1#1: nginx/1.21.6
2022/05/02 05:30:57 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6)
2022/05/02 05:30:57 [notice] 1#1: OS: Linux 4.18.0-348.el8.0.2.x86_64
2022/05/02 05:30:57 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2022/05/02 05:30:57 [notice] 1#1: start worker processes
2022/05/02 05:30:57 [notice] 1#1: start worker process 32
2022/05/02 05:30:57 [notice] 1#1: start worker process 33


#### 容器转镜像


使用命令:"docker commit {容器ID|容器名称} 镜像名称"来打包容器,如果容器在运行中可以使用-p参数



[root@docker ~]# docker commit -p myweb myweb:v1.0
sha256:05f5efa5b56fd3d9c6d17b74ee4a3e9866095ac8cc681879dda21b9b7a968859
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myweb v1.0 05f5efa5b56f 4 seconds ago 142MB
nginx latest fa5269854a5e 11 days ago 142MB
hello-world latest feb5d9fea6a5 7 months ago 13.3kB


#### 容器信息


使用命令"docker inspect {容器ID|容器名称}"来查看容器的详细信息  
 他会列出很多很多信息 我这里举例筛选出容器的IP看一下



[root@docker ~]# docker inspect myweb|grep IP
“LinkLocalIPv6Address”: “”,
“LinkLocalIPv6PrefixLen”: 0,
“SecondaryIPAddresses”: null,
“SecondaryIPv6Addresses”: null,
“GlobalIPv6Address”: “”,
“GlobalIPv6PrefixLen”: 0,
“IPAddress”: “172.17.0.2”,
“IPPrefixLen”: 16,
“IPv6Gateway”: “”,
“IPAMConfig”: null,
“IPAddress”: “172.17.0.2”,
“IPPrefixLen”: 16,
“IPv6Gateway”: “”,
“GlobalIPv6Address”: “”,
“GlobalIPv6PrefixLen”: 0,


## DockerFile


### 概述


Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。


### 构建参数


#### COPY


复制指令,从上下文目录中复制到容器里面  
 用法:  
 COPY [–chown=用户:组] 源路径 容器目的路径  
 –chown可以不使用


#### ADD


ADD和COPY使用格式类似 同样需求下官方是推荐使用COPY


#### RUN


运行命令  
 用法:  
 RUN 命令


#### CMD


类似与Run 与RUN不同的是 CMD是在docker run 的时候执行 而RUN是在dockerfile构建镜像的时候执行  
 用法和RUN一样


#### ENTRYPOINT


类似CMD参数,但其不会被docker run的命令参数覆盖用法和RUN、CMD一样(当dockerfile存在多个此参数的时候只会执行最后一个)


#### ENV


改变环境变量,定义环境变量。  
 ENV key value


#### ARG


和ENV效果一样但是只会在dockerfile构建的时候生效 构建好容器之后不生效


#### VOLUME


定义默认挂载数据卷 当运行容器的时候如果没有定义位置会自动挂载  
 VOLUME 路径 路径


#### EXPOSE


声明端口 当使用-P运行容器的时候就是映射的这个端口  
 EXPOSE 端口


#### WORKDIR


指定工作目录 就是链接的时候的默认目录  
 WORKIDIR 目录


#### USER


用来指定执行后续命令的用户  
 USER 用户


### 构建


写好Dockerfile文件之后使用命令"docker build 镜像名称:版本 dockerfile的目录"来构建



[root@docker ~]# mkdir dockerfile
[root@docker ~]# cd dockerfile/
[root@docker dockerfile]# vim dockerfile
[root@docker dockerfile]# cat dockerfile
FROM nginx
RUN echo ‘我是dockerfile构建的容器’ > /usr/share/nginx/html/index.html
[root@docker dockerfile]# docker build -t mynginx:v1.0 ./
Sending build context to Docker daemon 2.048kB
Step 1/2 : FROM nginx
—> fa5269854a5e
Step 2/2 : RUN echo ‘我是dockerfile构建的容器’ > /usr/share/nginx/html/index.html
—> Running in d73c0f94b402
Removing intermediate container d73c0f94b402
—> 4650cd039883
Successfully built 4650cd039883
Successfully tagged mynginx:v1.0
[root@docker dockerfile]# docker images |grep mynginx
mynginx v1.0 4650cd039883 10 seconds ago 142MB


## Docker的网络


### 概述


Docker网络是宿主机虚拟出来的,并不是真实存在的网络设备,外部网络无法直接访问到容器,从而实现网络的隔离。


### 网络模式


#### Host


![host](https://image.boychai.xyz/article/Docker_network_host.png)  
 启动容器时使用host模式,那这个容器将不会获得一个独立的ip,而是和宿主机共用一个ip,容器将不会虚拟出自己的网卡,而是使用宿主机的ip和端口,但是容器其他方面,比如文件系统,进程系统都是独立。


#### Container


![container](https://image.boychai.xyz/article/Docker_network_container.png)  
 启动容器时使用Container使用的时候需要指定一个容器id或者容器名称,这个模式会和指定的容器共享同一个ip,和host一样除了ip是共享对应容器的ip之外,容器的其他方面,比如文件系统,进程系统都是独立的。


#### None


![none](https://image.boychai.xyz/article/Docker_network_none.png)  
 启动容器时使用None,Docker容器将不会生成网卡,也就是说容器会没有网卡,ip,路由等信息。需要我们自己来添加。这种网络情况只会又一个lo回环网卡。


#### bridge


![bridge](https://image.boychai.xyz/article/Docker_network_bridge.png)  
 当docker服务启动的时候,会在主机上创建一个docker0的虚拟网卡,此主机默认启动的容器都会链接到这个虚拟网卡上。类似与vmwar 的一个虚拟网络。


### 网络管理


#### 网络列表


使用命令:"docker network ls"来列出所有当前网络



[root@docker ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
ac3a791d7c38 bridge bridge local
cb275e88b131 host host local
68b3fda03c16 none null local


#### 创建网络


docker network create 参数 网络名称  
 -d:网路模式  
 –subnet:指定网段  
 –gateway:指定网关(指定虚拟网卡得ip)  
 自定网络可以支持很多东西 比如不需要dns可以通过容器名来互相ping同  
 比如我用network create了一个网络 并且创建了两个容器 os1,os2 使用os1pingos2的时候会互通 不需要配置任何的dns 他会自动寻找 默认的docker0则就没有这个功能



[root@docker ~]# docker network create -d bridge --subnet 192.168.1.0/24 --gateway 192.168.1.254 mynetwork
5fb087dccbabedf4b97fcc09b448ee717acbfa35fc520698985f536dea8be5e7
[root@docker ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
ac3a791d7c38 bridge bridge local
cb275e88b131 host host local
5fb087dccbab mynetwork bridge local
68b3fda03c16 none null local


#### 删除网络



使用命令:“docker rm {网络ID|网络名称}”
[root@docker ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
ac3a791d7c38 bridge bridge local
cb275e88b131 host host local
5fb087dccbab mynetwork bridge local
68b3fda03c16 none null local
[root@docker ~]# docker network rm mynetwork
mynetwork
[root@docker ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
ac3a791d7c38 bridge bridge local
cb275e88b131 host host local
68b3fda03c16 none null local


#### 关联容器


docker network connect 命令是用于将docker容器 连接/断开 到某个网络中,或者与其他容器 建联/断开,容器可以使用容器名或者容器ID。  
 用法:  
 docker network connect/disconnect {网络ID|网络名称} {容器ID|容器名称}


#### 详细信息


使用命令:"docker network inspect {网络ID|网络名称}"来查询网络的详细信息



[root@docker ~]# docker network create -d bridge --subnet 192.168.1.0/24 --gateway 192.168.1.254 mynetwork
af5233ce4e299130cadee1bc8c9754b576bfb63d6ac229ad7856a653b2109e1e
[root@docker ~]# docker network inspect mynetwork
[
{
“Name”: “mynetwork”,
“Id”: “af5233ce4e299130cadee1bc8c9754b576bfb63d6ac229ad7856a653b2109e1e”,
“Created”: “2022-05-02T02:44:46.644429172-04:00”,
“Scope”: “local”,
“Driver”: “bridge”,
“EnableIPv6”: false,
“IPAM”: {
“Driver”: “default”,
“Options”: {},
“Config”: [
{
“Subnet”: “192.168.1.0/24”,
“Gateway”: “192.168.1.254”
}
]
},
“Internal”: false,
“Attachable”: false,
“Ingress”: false,
“ConfigFrom”: {
“Network”: “”
},
“ConfigOnly”: false,
“Containers”: {},
“Options”: {},
“Labels”: {}
}
]


## Docker-Compose容器编排


### 概述


Docker Compose可以轻松,高效的管理容器,他是一个用于定义和运行多个容器的docker的应用程序工具。在生产环境中一个应用肯定有很多个docker容器构成,而就单纯的docker一次性只能实现单个容器的部署,为了这个问题,docker compose 应运而生。


### 安装


**官方下载文档**:https://docs.docker.com/compose/install/  
 docker默认不自带docker-compose工具,需要自己手动去下载



[root@docker ~]# curl -SL https://github.com/docker/compose/releases/download/v2.4.1/docker-compose-linux-x86_64 -o /usr/bin/docker-compose
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 664 100 664 0 0 1412 0 --:–:-- --:–:-- --:–:-- 1412
100 25.2M 100 25.2M 0 0 239k 0 0:01:48 0:01:48 --:–:-- 365k
[root@docker ~]# chmod +x /usr/bin/docker-compose
[root@docker ~]# docker-compose -v
Docker Compose version v2.4.1


### 使用和管理


#### 使用


使用docker-compose需要在目录里定义一个名称为"docker-compose.yml"的yml文件,这个文件就是用来定义服务配置的之后可以使用docker-compose来管理这个文件里定义的资源。  
 官方文档:[Docker-Compose](https://bbs.csdn.net/topics/618679757)


#### 启动



docker-compose up


在当前目录定义好docker-compose的yml文件之后可以使用此命令来运行,默认在前台运行可以追加"-d"参数使其运行在和后台。


#### 重新运行



docker-compose restart


重启全部定义的容器资源


#### 停止运行



docker-compose stop


停止运行定义的容器


#### 删除



docker-compose down


停止并删除对应的容器


### YML配置参考


#### docker-compose.yml的格式



#全局配置层
version: 3 #版本
services:
##定义层
app1:
##配置层
image: nginx:1.26 #镜像
ports:80:80 #端口映射
environment: aa=bb #系统环境
volumes: #挂载卷定义
networks: #网络定义
app2:
app3:


#### version


这个版本需要和docker的版本相对应具体对应信息可去官网查看[版本对照](https://bbs.csdn.net/topics/618679757)


#### build


在配置层定义,如果自己定义了dockerfile想让docker-compose来运行可以直接使用build来构建。



version: “3”
services:
myapp:
build: .


#### image


在配置层定义,用来指定镜像  
 version: “3”



services:
myapp:
image: nginx


#### command


在配置层定义,修改容器启动时执行的命令



version: “3”
services:
myapp:
image: centos
command: [“bash”]


#### container\_name


在配置层定义,默认docker-compose启动容器的名称格式为<项目名称>*<服务名称>*<序号>,这个参数可以直接修改容器的名字



version: “3”
services:
myapp:
container_name: myapp
image: centos
command: [“bash”]


#### environment


在配置层定义,定义容器的环境变量



version: “3”
services:
myapp:
container_name: mySQL
image: mariadb
environment:
MYSQL_ROOT_PASSWORD: aaaaaa


#### env\_file


在配置层定义,和environment一样用来定义环境变量,他这个是指定一个文件,直接使用environment来定义环境变量可能会有一些敏感信息不适合直接放在docker-compose里使用,env\_file可以指定一个环境文件,文件格式为键值对的方式key=value



version: “3”
services:
myapp:
container_name: mySQL
image: mariadb
env_file:
- ./env
[root@boychai docker-compose]# cat env
MYSQL_ROOT_PASSWORD=aaaaaaa


#### depends\_on


在配置层定义,用来配置启动关系,配置了之后里面写其他服务容器的名称,只有里面定义容器启动后,自己才会启动,可以理解为服务容器启动的前提条件。



version: “3”
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: mysql


#### restart


在配置层定义,用来配置重启策略,模式如下  
 \*\*no:\*\*是默认的重启策略,在任何情况下都不会重启容器  
 \*\*always:\*\*容器总是重新启动  
 \*\*on-failure:\*\*在容器非正常退出时(退出状态非0),才会重启容器  
 \*\*unless-stopped:\*\*在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器



version: “3”
services:
web:
restart: always
build: .
depends_on:
- db
- redis
redis:
restart: always
image: redis
db:
restart: always
image: mysql


#### volumes


在配置层定义,用来把主机的数据卷或着文件挂载到容器里。如下



version: “3”
services:
myapp:
image: nginx:latest
volumes:
- “/usr/nginx/html:/usr/share/nginx/html”
- “/var/log/nginx:/var/log/nginx”


也可以在全局层进行一个生命,然后配置层进行调用,如下



version: “3”
services:
myapp:
image: nginx:latest
volumes:
- nginx_html:/usr/share/nginx/html
- nginx_log:/var/log/nginx
volumes:

  • nginx_html: /usr/nginx/html
  • nginx_log:/var/log/nginx

#### networks


网络配置,默认不声明的话docker会自动生成一个默认的bridge类型的网络,在全局配置层定义一个networks,如下配置




**收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。**
![img](https://img-blog.csdnimg.cn/img_convert/1df61d979977fc25264f82854996d9ca.png)
![img](https://img-blog.csdnimg.cn/img_convert/c14bac011cd820b7bb751b516830cae6.png)

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618679757)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人**

**都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

/html"
      - "/var/log/nginx:/var/log/nginx"


也可以在全局层进行一个生命,然后配置层进行调用,如下

version: "3"
services:
  myapp:
    image: nginx:latest
    volumes:
      - nginx_html:/usr/share/nginx/html
      - nginx_log:/var/log/nginx
volumes:
  - nginx_html: /usr/nginx/html
  - nginx_log:/var/log/nginx


networks

网络配置,默认不声明的话docker会自动生成一个默认的bridge类型的网络,在全局配置层定义一个networks,如下配置

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
[外链图片转存中…(img-R4pKXJu8-1715639400941)]
[外链图片转存中…(img-HK5K8Tys-1715639400942)]

如果你需要这些资料,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 11
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值