Docker实际应用以及常见问题

591 阅读3分钟

保留关键字

DockerFile

FROM :基础镜像,当前新镜像的基础镜像,相当于java 的import

常见问题

1.删除镜像和删除容器应注意哪些?

# 当同一个镜像拥有多个标签时,docker rmi命令只是删除了该镜像多个标签中的指定标签,并不影响镜像文件本身,但当镜像只剩下一个标签时,此时就会彻底删除镜像。
# 当docker rmi命令后面跟的是镜像ID时,会尝试删除所有指向该镜像的标签,然后删除镜像文件本身,如果该镜像存在多个标签,默认无法删除,需要加-f进行删除。
# 如果有基于该镜像创建的容器,则默认无法删除镜像,需要先通过docker rm删除容器,然后再用docker rmi删除镜像,或者使用docker rmi -f强制删除(不推荐)。

2.docker下载的镜像都存放在那个目录下?

cd /var/lib/docker 
➜  docker ls
aufs  containers  image  network  plugins  swarm  tmp  tmp-old  trust  volumes
➜  docker cd image 
➜  image ls
aufs
➜  image cd aufs 
➜  aufs ls
distribution  imagedb  layerdb  repositories.json
➜  aufs cat repositories.json 
{"Repositories":{"mysql":{"mysql:latest":"sha256:c7109f74d339896c8e1a7526224f10a3197e7baf674ff03acbab387aa027882a","mysql@sha256:415ac63da0ae6725d5aefc9669a1c02f39a00c574fdbc478dfd08db1e97c8f1b":"sha256:c7109f74d339896c8e1a7526224f10a3197e7baf674ff03acbab387aa027882a"}}}#                                                                         ➜  aufs  

3.docker格式化输出docker ps的展示列

docker ps -a --format "table {{.ID}}\t{{.Image}}\t{{.Names}}\t{{.Status}}"

4.docker自定义下载地址

# 默认情况下docker的镜像的默认存储路径是/var/lib/docker
# 1. vi /usr/lib/systemd/system/docker.service
在文本内容ExecStart=/usr/bin/dockerd 后面添加如下内容:  --graph  <your path>
eg:ExecStart=/usr/bin/dockerd --graph /root/docker -H fd://
# 2.重新加载配置文件 
systemctl daemon-reload 
# 3.重新启动docker服务
systemctl restart docker

5.docker如何清理占用的磁盘空间?

docker system command # 用于管理磁盘空间
docker system df 命令类似于Linux的df命令,用于查看docker的磁盘使用情况

docker system prune # 命令用于清理磁盘,删除关闭的容器,无用的数据卷和网络以及无tag的镜像
docker system prune -a # 清理的更加彻底,可以将没有容器使用的docker镜像都删除调

docker运行mysql镜像

docker run --name mysql --hostname mysql -v /root/docker/share/mysql/data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:latest
  • --name: 为容器设置名字,eg:mysql
  • -p: 为容器设置端口映射 eg:3306:3306 冒号左边是宿主机的端口,冒号右边是容器的端口
  • -e: 为设置执行时的环境变量,eg -e MYSQL_ROOT_PASSWORD=root 设置mysql的root登录密码,密码为root
  • -d: 为设置镜像,镜像名:版本(tag)
  • -v: 为容器设置同步数据卷,把容器的目录和宿主机的目录同步,冒号左面宿主机目录,右面容器目录,作用数据同步
  • --hostname: 为容器设置主机名 eg --hostname mysql 设置主机名为mysql

docker 把本地修改的容器镜像提交到阿里云

# 前提条件先本地登录上阿里云的dockerhub

# 第一步查看本地的容器
docker ps -a

# 第二步提交本地修改的容器,打包成image  eg: docker commit -m "添加mycli工具修改" -a "author" 6ad4ac3185f6 mysql:latest
docker commit -m "备注内容" -a "作者" containerId REPOSITORY:TAG

# 第三步把新打包的镜像打包tag eg: docker tag 6826888037 registry.cn-hangzhou.aliyuncs.com/***/mysql:mycli
docker tag 682659***37 registry.cn-hangzhou.aliyuncs.com/***/仓库名:镜像版本

# 第四步把新打的tag上传到阿里云仓库,仓库名和镜像版本就是刚才指定的 eg: docker push registry.cn-hangzhou.aliyuncs.com/***/mysql:mycli
docker push registry.cn-hangzhou.aliyuncs.com/***/仓库名:镜像版本