docker 镜像、容器、网络、目录挂载

起因:之前是为了学docker而去学习,之后在项目的实践过程中,逐步把自身所学运用到项目中去,发现实践和学习还是不同的,加油。


1、Docker镜像相关的命令

常用的操作镜像的命令

常用命令

详细命令:
1、查看镜像

docker images 
#或者
docker image ls

REPOSITORY:镜像名称
TAG:镜像标签 (默认是可以省略的,也就是latest)
IMAGE ID:镜像ID
CREATED:镜像的创建日期(不是获取该镜像的日期)
SIZE:镜像大小
这些镜像都是存储在Docker宿主机的/var/lib/docker目录下

2、搜索镜像
如果你需要从网络中查找需要的镜像,可以通过以下命令搜索
docker search 镜像名称

NAME:仓库名称
DESCRIPTION:镜像描述
STARS:用户评价,反应一个镜像的受欢迎程度
OFFICIAL:是否官方
AUTOMATED:自动构建,表示该镜像由Docker Hub自动构建流程创建的

3、拉取镜像
格式:docker pull 镜像名称[:TAG]

#例如,我要下载centos7镜像 
docker pull centos:7 
docker pull redis 
docker pull tomcat:8.5.47-jdk8-openjdk

4、删除镜像

docker rmi 镜像ID 
docker rmi 镜像名称 
docker rmi 镜像名称:tag 
docker rmi `docker images -q` 删除所有镜像(谨慎操作)

小结
1:查看 docker images
2:下载镜像的命令: docker pull 镜像名称[:TAG] 如果TAG不指定,那么下载的最新版本,就相当于自动增加: :latest
3:删除镜像:docker rmi 镜像名称|镜像ID

2、 容器创建与启动容器

掌握创建与启动容器的命令
1、查看容器
查看最后一次运行的容器

docker ps -l

查看运行容器

docker ps

查看所有容器( 推荐)

docker ps -a

2、创建容器 docker run 常用的参数说明:
详细命令:

  docker run --help

创建容器例子
(1)交互式方式创建容器(创建以后就进入到容器内部了)

docker run -it --name 容器名称 镜像名称:标签 /bin/bash
这时我们通过ps命令查看,发现可以看到启动的容器,状态为启动状态 退出当前容器 exit

(2)守护式方式创建容器:(默认自动启动你的容器)

docker run -di --name 容器名称 镜像名称:标签
登录守护式容器方式: docker exec -it 容器名称 (或者容器ID) /bin/bash

以交互式和以守护式创建容器都可以,个人偏向于守护式创建容器

(3) 容器相关命令

容器相关命令
#停止容器: 
docker stop 容器名称(或者容器ID) 
docker stop 容器名称(或者容器ID) ,容器名称(或者容器ID)
 #重启容器: 
docker restart 容器名称(或者容器ID) 
docker restart 容器名称(或者容器ID) ,容器名称(或者容器ID) 
# 启动容器: 
docker start 容器名称(或者容器ID) 
docker start 容器名称(或者容器ID)容器名称(或者容器ID) 
# 删除容器 
docker rm 容器名称(或者容器ID)
docker rm 容器名称(或者容器ID) 容器名称(或者容器ID) 
docker rm -f $(docker ps -q -a) 删除所有容器 
# 查询启动日志 
docker logs -f 容器id(容器名字)

注意:
删除容器的时候,一定要先执行停止容器命令。
如果启动容器出错,把网卡重新设置如下:

# 出现如下类似错误 
#COMMAND_FAILED: '/sbin/iptables -t nat -A DOCKER -p tcp -d 0/0 --dport 8111 -j DNAT --to-destination 172.17.0.6:8111 ! -i docker0' failed: iptables: No chain/target/match by that name. 

pkill docker 
iptables -t nat -F 
ifconfig docker0 down 
brctl delbr docker0 
systemctl start docker 
重启docker后解决

查看容器资源利用率问题:

  docker stats 容器id|名字

3.网络

使用-p或者--net进行宿主机端口映射
默认情况下Docker采用的是:桥接模式

桥接模式 brige
注:-p 是 --pushlish 的缩写

docker run -di --name mytomcat -p 8080:8080 tomcat:8.5.47-jdk8-openjdk
#等价于
#docker run -di --name mytomcat --publish 8080:8080 tomcat:8.5.47-jdk8-openjdk

host模式,使用--net=host指定

但如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口

docker run -it --name mytomcat --net=host tomcat:8.5.47-jdk8-openjdk

一定关闭宿主机的防火墙:

systemctl disabled firewalld
systemctl stop firewalld

4.文件拷贝

如果我们需要将文件拷贝到容器内可以使用cp命令

docker  cp 需要拷贝的文件或目录 [容器名称|ID]:容器目录 
> docker cp hello.txt mynginx:/usr/local
#也可以将文件从容器内拷贝出来
docker  cp 容器名称:容器目录 需要拷贝的文件或目录
> docker cp mynginx:/usr/local/hello.txt hello.txt

5.目录挂载(卷Volume)

其实就是修改宿主机的文件,会自动修改容器内部的文件。

我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。创建容器 添加-v参数 后边为 宿主机目录:容器目录,例如:

docker run -d -it --name=nginx-test --mount src=nginx-vol,dst=/usr/share/nginx/html nginx
#或者
docker run -d -it --name=nginx-test -v nginx-vol:/usr/share/nginx/html nginx

查看IP和相关的安装信息和目录

docker inspect [容器名|容器ID]
> docker inspect tomcat
> docker inspect nginx
路径

完整命令如下--Mount以容器为主
1:创建一个卷

docker volume create mynginx-vol

2:查看卷 /var/lib/docker/volume

docker volume ls

3:查看卷的详细信息,是为了去得知romcat/nginx的安装目录

docker volume inspect mynginx-vol

4:创建一个nginx的目录挂载和卷的映射

docker run -d -it --name mytomcat --mount src=mynginx-vol,dst=/usr/share/nginx/html -p 90:80 nginx

核心代码: --mount src=mynginx-vol,dst=/usr/share/nginx/html

你可能感兴趣的:(docker 镜像、容器、网络、目录挂载)