Docker1

Docker

Docker各种指令合集

docker version     #显示docker详细信息
docker info       #显示docker的系统信息,包括镜像和容器的数量
docker pull xx:version  拉取镜像
docker --help     #docker帮助命令手册
docker images  #查看所有本地主机的镜像
-a    all
-c   后面跟待完成的命令
-d   以后台方式运行并且返回ID,启动守护进程式容器
-i   使用交互方式运行容器,通常与t同时使用
-t   为容器重新分配一个伪输入终端。也即启动交互式容器
-p   指定容器端口    -p 容器端口:物理机端口  映射端口
-P   随机指定端口
-v   给容器挂载存储卷
docker build  #创建镜像        -f:指定dockerfile文件路径   -t:镜像名字以及标签
docker ps 查看当前运行中的容器
docker rm container-id 删除指定 id 的容器
docker stop/start container-id 停止/启动指定 id 的容器
docker rmi image-id 删除指定 id 的镜像
docker rmi -f $(docker images -aq)  删除所有镜像
docker volume ls 查看 volume 列表
docker network ls 查看网络列表

docker ps 查看当前运行中的容器
docker rm container-id 删除指定 id 的容器
docker stop/start container-id 停止/启动指定 id 的容器
docker rmi image-id 删除指定 id 的镜像
docker volume ls 查看 volume 列表
docker network ls 查看网络列表
docker exec -it ID/NAMES ip addr  查看容器ip
docker inspect ID/NAMES  查看容器底层信息

docker tag  镜像名:版本   新镜像名:版本    #复制镜像并且修改名称
docker commit  -a "xxx"  -c "xxx" 镜像ID 名字:版本   #提交镜像 
docker load -i    /xxx/xxx.tar         #导入镜像
docker save -o   /xxx/xxx.tar          #保存一个镜像为一个tar包

docker run -d --name 指定名字

More info:

https://docker.easydoc.net/doc/81170005/cCewZWoN/lTKfePfP; docker学习网站

DockerHub 可以查看镜像

Docker快速安装软件:可以参考 https://blog.csdn.net/HXNLYW/article/details/88950291

常见的使用方式

docker run [可选参数] image 命令 #启动容器(无镜像会先下载镜像)
#参数说明
--name = "Name"   容器名字
-c   后面跟待完成的命令
-d   以后台方式运行并且返回ID,启动守护进程式容器
-i   使用交互方式运行容器,通常与t同时使用
-t   为容器重新分配一个伪输入终端。也即启动交互式容器
-p   指定容器端口    -p 容器端口:物理机端口  映射端口
-P   随机指定端口
-v   给容器挂载存储卷


第一种:交互方式创建容器,退出后容器关闭。
docker run -it 镜像名称:标签 /bin/bash
第二种:守护进程方式创建容器。
docker run -id 镜像名称:标签
通过这种方式创建的容器,我们不会直接进入到容器界面,而是在后台运行了容器,
如果我们需要进去,则还需要一个命令。
docker exec -it  镜像名称:标签  /bin/bash
通过这种方式运行的容器,就不会自动退出了。

DockerFile---为自己的web项目构建镜像


DockerFile是用于构建Docker镜像的脚本文件,它包含了一系列指令,用于指定镜像的构建过程。下面是一个简单的DockerFile编写示例:

```
# 指定基础镜像
FROM node:12

# 设置工作目录
WORKDIR /app

# 复制应用程序代码到容器中
COPY . .

# 安装依赖
RUN npm install

# 暴露端口
EXPOSE 3000

# 启动应用程序
CMD ["npm", "start"]
```
上述DockerFile中包含了以下指令:

- FROM:指定基础镜像,本例中使用的是Node.js 12版本的官方镜像。
- WORKDIR:设置工作目录,本例中设置为/app。
- COPY:将应用程序代码复制到容器中。
- RUN:安装依赖,本例中使用npm install安装依赖。
- EXPOSE:暴露端口,本例中暴露3000端口。
- CMD:启动应用程序,本例中使用npm start启动应用程序。

编写DockerFile时需要注意以下几点:

- 每个指令都会创建一个新的镜像层,因此应尽量减少指令的数量。
- 指令的顺序很重要,应根据依赖关系合理安排指令的顺序。
- 可以使用注释来解释每个指令的作用,以便他人理解。
- DockerFile中的指令不区分大小写,但建议使用大写字母以便于阅读。

Docker volume

Docker Volume是Docker中用于持久化数据的一种机制。它允许将数据存储在Docker主机上的一个目录中,而不是存储在容器内部。这样做的好处是,即使容器被删除或重新创建,数据仍然可以保留。Docker Volume还可以用于在多个容器之间共享数据。

Docker Volume是Docker中用于持久化数据的一种机制。它允许将数据存储在Docker主机上的一个目录中,而不是存储在容器内部。这样做的好处是,即使容器被删除或重新创建,数据仍然可以保留。Docker Volume还可以用于在多个容器之间共享数据。

Docker Volume的使用非常简单。可以使用docker volume create命令创建一个新的volume,也可以使用docker run命令的-v选项来指定一个已经存在的volume。例如,下面的命令将创建一个名为mydata的volume:

```
docker volume create mydata
```

然后,可以使用docker run命令的-v选项来将该volume挂载到容器中的一个目录中。例如,下面的命令将创建一个名为mycontainer的容器,并将mydata volume挂载到容器中的/data目录中:

```
docker run -d --name mycontainer -v mydata:/data myimage
```

在容器内部,可以像使用普通目录一样使用挂载的volume。例如,可以将文件写入/data目录中,这些文件将存储在Docker主机上的mydata目录中。如果删除容器,数据仍然会保留在mydata目录中。

Docker Volume还可以用于在多个容器之间共享数据。例如,可以创建一个名为mydata的volume,并将其挂载到多个容器中。这样,这些容器就可以共享相同的数据。如果一个容器写入了数据,其他容器也可以读取这些数据。

总之,Docker Volume是Docker中非常有用的一个功能,它可以帮助我们持久化数据,并在多个容器之间共享数据。

Docker挂载


Docker挂载是指将主机上的目录或文件系统挂载到Docker容器中的指定目录,使得容器可以访问主机上的文件或目录。这样做的好处是,可以将数据持久化到主机上,即使容器被删除或重新创建,数据仍然可以保留。同时,也可以在多个容器之间共享数据。

Docker挂载可以通过在docker run命令中使用-v选项来实现。例如,下面的命令将主机上的/data目录挂载到容器中的/mydata目录:

```
docker run -v /data:/mydata myimage
```

在容器内部,/mydata目录将指向主机上的/data目录,容器可以访问该目录中的文件。如果在容器中创建或修改文件,这些文件也会保存在主机上的/data目录中。

Docker挂载还可以使用Docker Volume来实现。Docker Volume是Docker中用于持久化数据的一种机制,它允许将数据存储在Docker主机上的一个目录中,而不是存储在容器内部。这样做的好处是,即使容器被删除或重新创建,数据仍然可以保留。Docker Volume还可以用于在多个容器之间共享数据。

总之,Docker挂载是将主机上的目录或文件系统挂载到Docker容器中的指定目录,使得容器可以访问主机上的文件或目录,是Docker中非常有用的一个功能。

Docker Volume怎么实现容器的数据共享


Docker Volume可以实现容器的数据共享。具体实现方法如下:

1. 创建一个Docker Volume

使用`docker volume create`命令创建一个新的Docker Volume,例如:

```
docker volume create mydata
```

2. 将Docker Volume挂载到容器中

使用`docker run`命令的`-v`选项将Docker Volume挂载到容器中的指定目录,例如:

```
docker run -d --name container1 -v mydata:/data myimage
```

这样,容器中的`/data`目录就会指向Docker Volume中的数据。

3. 将同一个Docker Volume挂载到另一个容器中

使用`docker run`命令的`-v`选项将同一个Docker Volume挂载到另一个容器中的指定目录,例如:

```
docker run -d --name container2 -v mydata:/data myimage
```

这样,容器2中的`/data`目录也会指向同一个Docker Volume中的数据,从而实现了容器之间的数据共享。

需要注意的是,如果多个容器同时写入同一个文件,可能会导致数据冲突。因此,在进行容器数据共享时,需要注意数据的一致性和安全性。

Docker网络 (概况)

自从Docker容器出现以来,容器网络通信就一直是被关注的焦点,也是生产环境的迫切需求。容器网络通信又分为两大方面:单主机容器上的相互通信,和跨主机的容器相互通信。

一、Docker单主机容器通信
基于对net namespace的控制,docker可以为在容器创建隔离的网络环境,在隔离的网络环境下,容器具有完全独立的网络栈,与宿主机隔离,也可以使容器共享主机或者其他容器的网络命名空间,基本可以满足开发者在各种场景下的需要。

按docker官方的说法,docker容器的网络有五种模式:
bridge模式,--net=bridge(默认)
这是dokcer网络的默认设置,为容器创建独立的网络命名空间,容器具有独立的网卡等所有单独的网络栈,是最常用的使用方式。在docker run启动容器的时候,如果不加--net参数,就默认采用这种网络模式。安装完docker,系统会自动添加一个供docker使用的网桥docker0,我们创建一个新的容器时,容器通过DHCP获取一个与docker0同网段的IP地址,并默认连接到docker0网桥,以此实现容器与宿主机的网络互通。

host模式,--net=host
这个模式下创建出来的容器,直接使用容器宿主机的网络命名空间。将不拥有自己独立的Network Namespace,即没有独立的网络环境。它使用宿主机的ip和端口。

none模式,--net=none
为容器创建独立网络命名空间,但不为它做任何网络配置,容器中只有lo,用户可以在此基础上,对容器网络做任意定制。这个模式下,dokcer不为容器进行任何网络配置。需要我们自己为容器添加网卡,配置IP。因此,若想使用pipework配置docker容器的ip地址,必须要在none模式下才可以。

其他容器模式(即container模式,join模式),--net=container:NAME_or_ID
与host模式类似,只是容器将与指定的容器共享网络命名空间。这个模式就是指定一个已有的容器,共享该容器的IP和端口。除了网络方面两个容器共享,其他的如文件系统,进程等还是隔离开的。
posted @ 2023-03-21 14:54  ZZX11  阅读(17)  评论(0编辑  收藏  举报