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和端口。除了网络方面两个容器共享,其他的如文件系统,进程等还是隔离开的。