docker,命令集合

docker 命令

镜像(image)

  docker的镜像(image)可以类比为我们安装虚拟机或者实体机系统时使用的IOS系统镜像,内容当然不同但是功能是类似的,容器(container)就是依据image生成的。

相关命令

查看本地已下载的镜像

docker images

搜索镜像

docker search mysql

下载镜像

docker pull  [镜像名称]

删除镜像

docker rmi [镜像名称]
# 如果有容器正在使用的镜像,想要删除,需要使用 -f 强制删除
docker rmi -f [镜像名称]
# 删除所有
docker rmi -f $(docker images -aq)

数据卷(volume)

  数据卷可以看做一个虚拟的U盘,它存在于主机(host)上由docker管理,可以通过挂载插到虚拟机(container)上。它是独立于container的,所以它常常用来做数据持久化。

相关命令

创建数据卷

docker volume create hello

挂载数据卷

docker run -d -v hello:/world busybox

将名为hello的数据卷挂载到容器(busybox)中的 /world 文件夹下。

查看数据卷信息

docker volume inspect myvolume

将会返回一个JSON数据

[
  {
    "CreatedAt": "2020-04-19T11:00:21Z",
    "Driver": "local",
    "Labels": {},
    "Mountpoint": "/var/lib/docker/volumes/8140a838303144125b4f54653b47ede0486282c623c3551fbc7f390cdc3e9cf5/_data",
    "Name": "myvolume",
    "Options": {},
    "Scope": "local"
  }
]

查看数据卷

docker volume ls

删除未使用的本地卷

docker volume prune

创建容器(container)的时候,会根据Dockfile自动创建一些匿名数据卷,同时手动创建一些相关的数据卷,这些数据卷在删除容器的时候并不会自动删除,所以有时候需要这个命令来删除一些无用的数据卷。

删除数据卷

docker volume rm

无法删除正在使用的数据卷

主机目录映射

还可以通过主机目录映射来实现数据持久化。

docker run -d -v G:/dockerV/hello:/world busybox

将主机的G:/dockerV/hello 映射到 busybox/world文件夹。

  尽量避免直接挂载主机文件夹到容器,可能会导致文件权限问题(容器内的用户可能没有权限访问这些文件夹)。如果确实需要挂载主机文件夹到容器中,请确保宿主机上的目录可以被容器内的用户访问

容器(container)

  容器就是相当于虚拟机啦。

新建容器并启动

docker run [] image
# 参数说明
image 使用的镜像
--name ‘Name’ 容器名字
-d 后台运行方式
-it 使用交互方式进入容器查看内容
-p 指定映射容器端口到主机端口 -p 8080:8080
	-p 主机端口:容器端口
--rm  移除容器的时候自动移除与其关联的`匿名`数据卷,指定了名称的不会被删除。
	
-P 随机指定端口

##  新建 启动并进入容器
docker run -it centos /bin/bash
# 退出容器
exit

# 退出但是不暂停容器
ctrl+p+q

# 查看运行的容器
docker ps
# 查看所有的容器
docker ps -a
-n=?  # 显示最近创建的N容器 -n=1
docker ps -q # 只显示ID

# 删除容器 window 下需要切换到powershell否则可能会报错
# unknown shorthand flag: 'a' in -aq)
# See 'docker rm --help'.
docker rm 容器ID
docker rm -f $(docker ps -aq) 删除所有
docker ps -a -q | xargs docker rm

容器的启动停止

docker start
docker restart
docker stop
docker kill
# powershell  停止所有容器
docker stop $(docker ps -a -q) 

命令后面指定容器名字或者容器ID,容器ID不必写全,只要能区分唯一的容器即可,哪怕只有一位。

查看日志

docker logs -f -t --tail 10 容器ID
-f format
-t timestamps

查看容器进程信息

docker top 容器ID

查看镜像源数据

docker inspect [容器ID]

进入正在运行的容器

docker exec -it 7cd1db4fc89f /bash/bin
# 或者
docker attach 7cd1db4fc89f

从容器拷贝文件

docker cp 7cd:/home/test.java F:\bi

commit 镜像

docker commit -m='提交的信息' -a='作者' 容器ID 目标镜像:TAG

容器 持久化和同步操作!容器间的数据共享

docker run -it -v G:/dockerV:/home centos /bin/bash
主机目录:容器目录

同步后主机修改之后,自动同步。通过这种方法共享的时候,要注意容器中的用户是否访问主机的文件夹的权限。

Mysql

使用Docker搭建mysql服务

  1. 拉取镜像
docker pull mysql:5.7   # 拉取 mysql 5.7
docker pull mysql       # 拉取最新镜像
  1. 创建容器(container)
docker run -d -p 3306:3306 --name mysql02 -e MYSQL_ROOT_PASSWORD=123456 mysql
  • -d 后台运行的方式启动容器,退出命令行之后容器不会退出。
  • -p 将容器的端口映射到主机的端口(前面是主机端口)
  • –name 给容器指定一个名字,如果不提供会生成一个随机的名字
  • -e 设置环境变量,MYSQL_ROOT_PASSWORD 指定了mysql root用户的密码
  1. 查看容器运行状态
docker container ls
  1. 进入容器
docker exec -it mysql bash

docker exec 命令作用,在已经运行的容器中执行命令。

mysql Docker 镜像文档

创建mysql并建立目录映射。实现数据持久化。

docker run -d -p 3310:3306 -v G:/dockerV/mysql:/etc/mysql/conf.d -v G:/dockerV/mysqlData:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 mysql

更新远程链接用户root的密码

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

具名挂载和匿名挂载

# 匿名挂载
docker run -d -P --name niginx0 -v /etc/nginx nginx
# 查看docker挂载的卷
docker volume ls
-v 容器内路径  # 匿名挂载 -- 生成一个匿名的数据卷并挂载
-v 卷名:容器内路径 # 具名挂载---挂载数据卷
-v 主机路径:容器内路径 # 指定路径挂载 --- 挂载主机路径

拓展

# ro 只读  rw 可读可写
# ro 只能宿主机操作
docker run -d -p nginx02 -v l:/etc/nginx:ro nginx

Dockerfile

# dockerfile
FROM centos

# 匿名挂载 数据卷
VOLUME ["vom1","vom2"]

# 执行命令
RUN npm i

# 只能有一条CMD 多个的时候只执行最后一个
CMD /bin/bash
# 构建image
docker build -f dockerfile -t lcncentos:1.0 . 
docker buildx build -f dockerfile -t xxx:1.0 .

镜像的导入导出

导出

docker save -o <自定义包名>.tar 镜像名称

导入

docker load -i  <报名>.tar
或者
docker  load < xxx.tar

数据卷

实现容器间的数据共享

# docker01 和docker02 共享数据卷
>docker run -it --name docker02 --volumes-from docker01 lcncentos:1.0

Dockerfile

FROM指定基础镜像
MAINTAINER (*已废弃) 推荐使用LAEBL维护者信息
LABELauther=xxx
RUN要干什么,生成镜像的时候要执行的命令
ADD添加文件,可以添加本地文件也可以通过url加载远程资源 ,会自动解压
COPY拷贝文件, 只能从本地复制文件
WORKDIR设置当前的工作目录
VOLUME设置卷,挂载主机目录
EXPOSE指定要打开的端口
CMD容器启动的时候运行的命令,多个的时候只有最后一个生效,如果启动容器的时候命令行传入的命令,则会被覆盖
ENV设置环境变量
ENTRYPOINT容器启动的时候执行的命令,CMD和ENTRYPOINT 至少有一个,如果都没有会报错更多信息
ONBUILD后面跟其它指令,如add,copy,run 等等,不可以跟onbuild,构建当前镜像时不触发,以当前镜像为基础镜像构建其它镜像的时候触发
FROM centos

LABEL auther=l

ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80

CMD echo $MYPATH
CMD /bin/bash
# 通过命令行传递CMD 会替换掉DockerFile中的CMD
docker run centos ls -l
# entrypoint则可以追加命令参数
docker run centos -l 

link 本质是修改host文件

veth-pair

网络模式

bridge:桥接模式

host: 主机模式

none :无网络

docker run -d -P --name tomcat01 --net bridge tomcat

window下docker安装mysql8之后连接不上的问题

使用mysql5.7没有这个问题

拉取镜像

docker pull mysql

创建容器

docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 mysql

通过Navicat 连接mysql报错
连接mysql报错

解决方法

# 连接容器
docker exec -it [mysql容器ID或者名字] bash
# 容器内连接数据库
mysql -u root -p123456
# 修改密码
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

再次链接即可,
个人推测是因为,docker 设置密码的时候将主机为可以远程链接的用户root的密码设置有问题。再次更新密码之后就可以链接了。

拉取镜像报错

Error response from daemon: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit

修改镜像加速地址

docker 镜像位置

https://www.jianshu.com/p/e79f4c938000

C:\Users\Administrator> wsl --list -v
  NAME                   STATE           VERSION
* docker-desktop         Running         2
  docker-desktop-data    Running         2
  // 导出
  C:\Users\Administrator> wsl --export docker-desktop-data "D:\Docker\wsl\data\docker-desktop-data.tar"
  // 移除原有虚拟机
  C:\Users\Administrator> wsl --unregister docker-desktop-data
  // 生成新虚拟机
  C:\Users\Administrator> wsl --import docker-desktop-data "D:\Docker\wsl\data" "D:\Docker\wsl\data\docker-desktop-data.tar" --version 2

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值