第11节:Docker基本操做

1、镜像相关命令

  • 镜像名称一般分两部分组成:[repository]:[tag]。
  • 在没有指定tag时,默认是latest,代表最新版本的镜像。

比如mysql:5.7 mysql指的是repository,5.7是tag。

截屏2022-04-09 下午6.08.03

docker builder构建一个镜像
dicker images 查看本地镜像
docker rmi xxx 删除镜像
docker push 推送镜像到远程仓库
docker pull 拉取镜像
docker save保存镜像为压缩包
docker load 加载压缩包为镜像

2、使用

1、首先去镜像仓库搜索nginx镜像,比如https://registry.hub.docker.com/

截屏2022-04-09 下午6.14.27

可以进去查看我们可以获取的一些信息

2、根据查看到的镜像信息,拉取指定版本,或者最新的

sudo docker pull nginx

3、查看本地镜像

sudo docker images

截屏2022-04-09 下午6.16.50

其他命令:

sudo docker save -o nginx.tar nginx:latest #保存为tar
sudo docker rmi nginx:latest #删除
sudo docker load -i nginx.tar #加载tar为镜像
docker load --help #查看load命令

3、容器命令

截屏2022-04-09 下午6.21.52

3.1、创建运行一个Nginx容器

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

命令解读:

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

3.2、查看日志

docker logs -f xxx

查看名字为xxx的容器日志

3.3、进入刚才的容器

docker exec -it mn bash

命令解读:

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

exit是退出

3.4、进入nginx html目录

cd /usr/share/nginx/html

修改index.html

sed -i 's#Welcome to nginx#hello#g' index.html
sed -i 's#<head>#<head><meta charset="utf-8">#g' index.html

不推荐在容器中修改文件,很不方便。

3.5、总结

每个命令都可以使用在后面加–help来查看用法。

比如docker ps --help可以知道,docker ps -a 命令可以查看所有的容器,docker ps只能看大运行的容器。

nginx容器启动后,localhost访问成功。

4、容器与数据耦合问题

4.1、存在的问题

截屏2022-04-10 下午2.05.52

4.2、数据卷

数据卷(volume)是一个虚拟目录,指向宿主机文件系统中的某个目录。

我们可以将容器中的文件绑定到数据卷,这样,不同的容器就能共享相同的文件了。

截屏2022-04-10 下午2.09.19

4.3、操做数据卷

docker volume [COMMAND]
#docker volume命令是数据卷操作,根据命令后跟随的command来确定下一步的操作:
create	创建一个volume 
inspect	显示一个或多个volume的信息 
ls		  列出所有的volume 
prune		删除未使用的volume 
rm		  删除一个或多个指定的volume

1、创建数据卷

截屏2022-04-10 下午2.13.45

2、列出所有数据卷

截屏2022-04-10 下午2.15.17

3、显示数据卷信息

截屏2022-04-10 下午2.16.32

Mountpoint:指的是真实的目录

4、删除未使用的数据卷

截屏2022-04-10 下午2.19.29

5、挂载数据卷

我们在创建容器时,可以通过 -v 参数来挂载一个数据卷到某个容器目录

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

我们先把之前创建的容器都删除了,然后创建新的:

截屏2022-04-10 下午2.29.39

可以看到,容器中的文件跑到了真实的目录下:

这样就可以用vi修改了。而且其他容器也能共享这些文件。

截屏2022-04-10 下午2.30.24

6、宿主机目录挂载

6.1、差异

之前是将容器目录挂载到数据卷下,这种方式是交给docker管理,目录比较深。

我们还可以直接挂载到我们指定的目录下。

6.2、操作

目录挂载与数据卷挂载的语法是类似的:
-v [宿主机目录]:[容器内目录]
-v [宿主机文件]:[容器内文件]

比如:
docker run --name mn -p 80:80 -v /home/dev/nginx/:/usr/share/nginx/html/ -d nginx

自己测试,这样不会自动创建出文件。

7、自定义镜像

7.1、镜像结构

截屏2022-04-10 下午3.18.11

镜像是分层结构,每一层称为一个Layer

  • BaseImage层:包含基本的系统函数库、环境变量、文件系统
  • Entrypoint:入口,是镜像中应用启动的命令
  • 其它:在BaseImage基础上添加依赖、安装程序、完成整个应用的安装和配置

7.2、什么是Dockerfile

Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。每一个指令都会形成一层Layer。

指令 说明 示例
FROM 指定基础镜像 FROM centos:6
ENV 设置环境变量,可在后面指令使用 ENV key value
COPY 拷贝本地文件到镜像的指定目录 COPY ./mysql-5.7.rpm /tmp
RUN 执行Linux的shell命令,一般是安装过程的命令 RUN yum install gcc
EXPOSE 指定容器运行时监听的端口,是给镜像使用者看的 EXPOSE 8080
ENTRYPOINT 镜像中应用的启动命令,容器运行时调用 ENTRYPOINT java -jar xx.jar

更新详细语法说明,请参考官网文档: https://docs.docker.com/engine/reference/builder

猜你喜欢

转载自blog.csdn.net/LookOutThe/article/details/124079265