社区电脑网络 → 浏览:帖子主题
* 帖子主题:docker 相关
pojin (ID: 1)
头衔:论坛坛主
等级:究级天王[荣誉]
积分:2826
发帖:230
来自:保密
注册:2023-12-09 09:36:49
造访:2026-05-05 13:56:22
[ 第 1 楼 ] 128 回复
Docker简介

Docker是一个快速交付应用、运行应用的技术:
Docker允许开发中将应用、依赖、函数库、配置一起打包,形成可移植镜像
Docker应用运行在容器中,使用沙箱机制,相互隔离
Docker镜像中包含完整运行环境,包括系统函数库,仅依赖系统的Linux内核,因此,可以在任意Linux操作系统上运行
启动、移除都可以通过一行命令完成,方便快捷

Docker与虚拟机的差异

docker是一个系统进程,虚拟机是在操作系统中的操作系统
docker体积小、启动速度快、性能好;虚拟机体积大、启动速度慢、性能一般

镜像和容器

镜像(Image):Docker将应用程序及其所需要的依赖、函数库、环境、配置等文件打包在一起,称为镜像。即打包的文件就是镜像。
容器(Container):镜像中的应用程序运行后形成的进程就是容器,只是Docker会给容器做隔离,对外不可见。即隔离的进程是容器。

DockerHub

DockerHub是一个Docker镜像的托管平台。这样的平台称为Docker Registry。

Docker基本操作
镜像常见命令

镜像名称一般分为两部分:[repository]:[tag],例如:mysql:5.7,如果tag没有指定,默认latest,代表最新版本镜像

docker build:构建镜像
docker pull:从服务拉取镜像
docker images:查看镜像
docker rmi:删除镜像 例如:docker rmi nginx:latest
docker push:推送到服务
docker save:保存镜像为一个压缩包 例如:docker save -o nginx.tar nginx:latest
docker load:加载压缩包为镜像 例如:docker load -i nginx.tar
docker --help:查看docker命令
docker images --help:查看docker image命令的用法

容器常见命令

docker run :创建并运行一个容器
docker pause: 暂停(挂起)容器
docker unpause:运行容器
docker stop:停止容器
docker start:重新开始容器
docker ps:查看所有运行的容器及状态 docker ps -a :查看所有容器,包含运行与不运行的
docker logs:查看容器运行日志 docker logs -f containerName :-f -follow跟踪日志
docker exec:进入容器执行命令
docker rm: 删除指定容器 docker rm -f :强制删除容器

创建容器运行

docker run --name containerName -p 80:80 -d nginx

命令解读:

docker run :创建并运行一个容器
  –name:给容器起一个名字
  -p:将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
  -d:后台运行容器
  nginx:镜像名称,例如nginx
  进入容器内部:

docker exec -it containerName bash

命令解读:

docker exec:进入容器内部,执行一个命令
  -it:给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互
  containerName:要进入的容器名称
  bash:进入容器后执行的命令,bash是一个linux终端交互命令

数据卷的基本操作

解决容器与数据耦合的问题,方便操作容器内数据,保证数据安全
数据卷(volume):是一个虚拟目录,指向宿主机文件系统中的某个目录。(/var/lib/docker/volumes/数据卷文件名),容器删除后,数据卷不删除。
数据卷操作的基本语法如下:

docker volume[COMMAND]
docker volume命令式数据卷操作,根据命令后跟随的command来确定下一步的操作:

docker volume create  :创建一个volume
docker volume inspect  :显示一个或多个volume的信息
docker volume ls      :列出所有的volume
docker volume prune    :删除未使用的volume
docker volume rm      :删除一个或多个指定的volume

挂载数据卷

如果容器运行时volume不存在,会自动被创建出来

docker run\                      # 创建并运行容器
--name containerName\          # 给容器起名
-v html:/usr/share/nginx/html\  # 把html数据卷挂载到容器内的/root/html这个目录中
-p 8080:80                      # 把宿主机的8080端口映射到容器内的80端口
nginx:latest\                  # 镜像名称

2024-03-27 09:15:51 IP:已设置保密
pojin (ID: 1)
头衔:论坛坛主
等级:究级天王[荣誉]
积分:2826
发帖:230
来自:保密
注册:2023-12-09 09:36:49
造访:2026-05-05 13:56:22
[ 第 2 楼 ] 129 回复
推送本地镜像到仓库前都必须重命名(docker tag)镜像,以镜像仓库地址为前缀。
推送镜像到私有镜像服务必须先tag
步骤一:重新tag本地镜像,名称前缀为私有仓库的地址:127.0.0.1:8080/

docker tag nginx:latest 127.0.0.1:8080/nginx:2.0

步骤二:推送镜像

docker push 127.0.0.1:8080/nginx:2.0

步骤三:拉取镜像

docker pull 127.0.0.1:8080/nginx:2.0

修改镜像储存位置

wsl --export docker-desktop d:\docker-desktop.tar
wsl --export docker-desktop-data d:\docker-desktop-data.tar
# stopDocker
wsl --unregister docker-desktop
wsl --unregister docker-desktop-data

wsl --import docker-desktop E:\dockerimages\docker-desktop d:\docker-desktop.tar --version 2
wsl --import docker-desktop-data E:\dockerimages\docker-desktop-data d:\docker-desktop-data.tar --version 2

2024-03-27 09:17:17 IP:已设置保密
pojin (ID: 1)
头衔:论坛坛主
等级:究级天王[荣誉]
积分:2826
发帖:230
来自:保密
注册:2023-12-09 09:36:49
造访:2026-05-05 13:56:22
[ 第 3 楼 ] 133 回复
下载镜像:
docker pull index.tenxcloud.com/tenxcloud/centos (国外的太慢,我用的是国内的镜像源)

做短标签:
sudo docker tag index.tenxcloud.com/centos:latest centos:latest (标记一个短标签,便于输入)

运行容器:
docker run -i -t centos:latest /bin/bash
此时就可以安装php mysql nginx了
比如可以用 www.lnmp.org 的安装包
安装lnmp完成后 exit 退出

打包新镜像:
查看刚刚运行过的docker容器
docker ps -a
拿到第一列的容器id,比如是:a1s2d3
docker commit a1s2d3 mydocker/dev:v1

查看镜像:
docker images

启动新镜像:
docker run -d -p 80:80 -v /web:/www mydocker/dev:v1 /sbin/init
-d 是后台运行
-p 是映射端口
-v 是映射目录
mydocker/dev:v1 就是刚才新打包的镜像名
/sbin/init 是容器运行后立即运行的脚本或程序

查看运行中的docker容器:
docker ps -a

操纵docker容器:
运行、停止、重启
docker stop/restart/kill/start <ID/Name>
删除容器
docker rm $(docker ps -a -q)

删除镜像:
docker rmi <IMG_NAME>

在boot2docker中进入root模式:
进入虚拟机
docker-machine ssh default
进入root模式
sudo -i
即可进入root模式
另一种办法:
从SSH工具连接虚拟机IP直接进入虚拟机
默认用户和密码:docker、tcuser
此时只是进入了虚拟机,要进入root模式就执行命令:sudo -i

2024-03-27 21:09:48 IP:已设置保密
pojin (ID: 1)
头衔:论坛坛主
等级:究级天王[荣誉]
积分:2826
发帖:230
来自:保密
注册:2023-12-09 09:36:49
造访:2026-05-05 13:56:22
[ 第 4 楼 ] 135 回复
杀死所有正在运行的容器:
docker kill `docker ps -aq`

删除所有停止的容器:
docker rm `docker ps -aq`

强制删除所有的容器 :
docker rm -f `docker ps -aq`
2024-03-27 21:24:18 IP:已设置保密
pojin (ID: 1)
头衔:论坛坛主
等级:究级天王[荣誉]
积分:2826
发帖:230
来自:保密
注册:2023-12-09 09:36:49
造访:2026-05-05 13:56:22
[ 第 5 楼 ] 136 回复
将容器保存到镜像,并修改镜像默认启动命令:
docker commit -c 'CMD [ "init" ]' container_name image_name
将镜像导出到本地文件:
docker save -o image_name.tar image_name
将本地镜像文件导入镜像库:
docker load -i image_name.tar
直接将容器导出到本地文件:
docker export container_name -o container_name.tar
将容器文件导入镜像并命名
docker import container_name.tar image_name
使用 ./Dockerfile 创建镜像
docker build -t imageName .
2024-03-27 21:39:20 IP:已设置保密
pojin (ID: 1)
头衔:论坛坛主
等级:究级天王[荣誉]
积分:2826
发帖:230
来自:保密
注册:2023-12-09 09:36:49
造访:2026-05-05 13:56:22
[ 第 6 楼 ] 142 回复
# 查看容器开放了哪些端口:
docker port containID
# 在容器内部查看容器开放了哪些端口:
使用 netstat -tln 或 ss -tln 命令来查看 TCP 端口。
使用 netstat -tuln 或 ss -tuln 命令来查看 TCP 和 UDP 端口。
2024-03-29 10:58:32 IP:已设置保密
分页: 1, 共 1 页
快速回复主题
账号/密码
用户: 没有注册? 密码:
评论内容