# 检查Docker信息 docker info # 搜素镜像 docker search [OPTIONS] TERM 参数说明: Options: -f, --filter filter Filter output based on conditions provided --help Print usage --limit int Max number of search results (default 25) --no-index Don't truncate output --no-trunc Don't truncate output -f, --filter filter: 过滤输出的内容; --limit int:指定搜索内容展示个数; --no-index: 不截断输出内容; --no-trunc:不截断输出内容; [root@VM_0_15_centos ~]# docker search mysql --no-trunc --limit=5 NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql MySQL is a widely used, open-source relational database management system (RDBMS). 9570 [OK] mysql/mysql-server Optimized MySQL Server Docker images. Created, maintained and supported by the MySQL team at Oracle 702 [OK] mysql/mysql-cluster Experimental MySQL Cluster Docker images. Created by the MySQL team at Oracle 69 bitnami/mysql Bitnami MySQL Docker Image 39 [OK] circleci/mysql MySQL is a widely used, open-source relational database management system (RDBMS). 19 # 下载镜像 docker pull [OPTIONS] NAME[:TAG|@DIGEST] name 镜像名称后面可以跟上镜像标签或者镜像摘要 如果没有指定镜像标签,docker默认使用:latest 拉取Ubuntu 14.04镜像 docker pull ubuntu:14.04 14.04: Pulling from library/ubuntu 5a132a7e7af1: Pull complete fd2731e4c50c: Pull complete 28a2f68d1120: Pull complete a3ed95caeb02: Pull complete Digest: sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2 Status: Downloaded newer image for ubuntu:14.04 docker已经帮我们打印出了该镜像的摘要: sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2 通过摘要方式拉取镜像:(只需要将摘要替换掉镜像标签tag即可) docker pull ubuntu@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2 下面的示例命令就会拉取最新的镜像文件,等同于:docker pull debian:latest docker pull debian 下载一个 Mysql 5.7 镜像 docker pull mysql:5.7 验证一下,本地是否存在 Mysql5.7 的镜像,运行命令: docker images 从一个镜像地址:myregistry.local:5000,拉取镜像文件:testing/test-image docker pull myregistry.local:5000/testing/test-image 从阿里云的Docker Hub 上pull一个MySQL的image. docker pull registry.cn-hangzhou.aliyuncs.com/acs-sample/mysql:5.7 # Docker 查看镜像信息 列出本机已有的镜像: docker images 或: docker image ls [root@VM_0_15_centos ~]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE jumpserver/jms_all latest 5f257513bfe3 5 days ago 1.48GB registry.cn-hangzhou.aliyuncs.com/acs-sample/mysql 5.7 ec7e75e5260c 4 years ago 360MB REPOSITORY: 来自于哪个仓库; TAG: 镜像的标签信息,比如 5.7、latest 表示不同的版本信息; IMAGE ID: 镜像的 ID, 如果您看到两个 ID 完全相同,那么实际上,它们指向的是同一个镜像,只是标签名称不同罢了; CREATED: 镜像最后的更新时间; SIZE: 镜像的大小 # 使用 tag 命令为镜像添加标签 为 registry.cn-hangzhou.aliyuncs.com/acs-sample/mysql 镜像,添加新的镜像标签 andy_mysql:5.7 。 docker tag registry.cn-hangzhou.aliyuncs.com/acs-sample/mysql:5.7 andy_mysql:5.7 [root@VM_0_15_centos ~]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE jumpserver/jms_all latest 5f257513bfe3 5 days ago 1.48GB andy_mysql 5.7 ec7e75e5260c 4 years ago 360MB registry.cn-hangzhou.aliyuncs.com/acs-sample/mysql 5.7 ec7e75e5260c 4 years ago 360MB 可以看到,本地多了一个 andy_mysql:5.7 的镜像。而且 andy_mysql:5.7 和 registry.cn-hangzhou.aliyuncs.com/acs-sample/mysql:5.7 的镜像 ID 是一模一样的,说明它们是同一个镜像,只是别名不同而已。 docker tag 命令功能更像是, 为指定镜像添加快捷方式一样。 # 使用 inspect 命令查看镜像详细信息 docker inspect andy_mysql:5.7 # 导出镜像 直接导出镜像文件: docker save -o ubuntu_demo.tar chasonlee/ubuntu_demo -o参数后面接着输出文件名。 chasonlee/ubuntu_demo是需要导出的镜像名。 注意:这里只是导出一个静态的镜像,根据当前镜像启动的容器环境并不能直接导出,如果需要迁移当前容器的环境,还需要先使用commit命令自行制作一个镜像再导出。 # 导入镜像 导入镜像: docker load -i ubuntu_demo.tar 导入后可以即可通过docker images查看镜像。 # 删除镜像 通过如下两个都可以删除镜像 docker rmi [image] 或者: docker image rm [image] 支持的子命令如下: -f, -force: 强制删除镜像,即便有容器引用该镜像。但是,我们一般不推荐这样暴力的做法,正确的做法应该是:1.先删除引用这个镜像的容器。2.再删除这个镜像。 -no-prune: 不要删除未带标签的父镜像; 当同一个镜像拥有多个标签时,执行 docker rmi 命令,只是会删除了该镜像众多标签中指定的标签而已,并不会影响原始的那个镜像文件。 # 清理镜像 我们在使用 Docker 一段时间后,系统一般都会残存一些临时的、没有被使用的镜像文件,可以通过以下命令进行清理: docker image prune 它支持的子命令有: -a, --all: 删除所有没有用的镜像,而不仅仅是临时文件; -f, --force:强制删除镜像文件,无需弹出提示确认; # docker run 创建容器 创建容器 -i,-interactive 交互式 -t,-tty 分配一个伪终端 -d,-detach 运行容器到后台 -e,-env 设置环境变量 -p(小写),-publish list 发布容器端口到主机 -P(大写),-publish -all 发布容器所有EXPOSE的端口到宿主机随机端口 --name string 指定容器名称 -h,-hostname 指定容器主机名 -ip string 指定容器IP,只能用于自定义网络 -network 连接容器到一个网络 -v,-volume list 绑定挂载一个卷 -restart string 容器退出时重启策略,默认no,可选值:【always|on-failure】 容器资源限制 -m,--memory 容器可以使用的最大内存量 -memory-swap 允许交换到磁盘的内存量 -memory-swappiness=<0-100> 容器使用swap分区交换的百分比(0-100,默认为-1) --oom-kill-disable 禁止OOM killer --cpus 可以使用的cpu数量 --cpuset-cpus 限制容器使用特定的cpu核心,如(0-3, 0,1) --cpu-shares cpu共享(相对权重) docker run 创建容器使用 docker run -it创建一个容器,并进入容器 [root@VM_0_15_centos ~]# docker run -it nginx docker run -d创建一个容器,并在后台运行 [root@VM_0_15_centos ~]# docker run -it -d nginx docker run -e创建一个容器,并设置环境变量 [[root@VM_0_15_centos ~]# docker run -it -d -e test=123456 nginx docker run -it -d -p80:80 创建一个容器,并设置本机端口对应容器端口 [root@VM_0_15_centos ~]# docker run -it -d -p80:80 nginx docker run -it -name webnginx 创建一个容器,并设置一个容器的名称 [root@VM_0_15_centos ~]# docker run -it -d --name webnginx nginx docker run -it -d -P 创建一个容器,并随机分配一个本机端口对应容器端口 [root@VM_0_15_centos ~]# docker run -it -d --name web1 -P nginx docker 容器资源限制 内存限制-m参数,允许容器最多使用500M内存和100M的swap,并禁用OOM killer [root@VM_0_15_centos ~]# docker run -it -d --name nginx03 --memory="500m" --memory-swap="100m" --oom-kill-disable nginx [root@VM_0_15_centos ~]# docker stats nginx03 #查看运行状态 cpu限额 ,允许容器最多使用一个的cpu [root@test-1 ~]# docker run -it -d --name nginx04 --cpus="1" nginx 允许容器最多使用50%的cpu [root@test-1 ~]# docker run -it -d --name nginx05 --cpus=".5" nginx # 查看容器的挂载目录 docker inspect container_name | grep Mounts -A 20 docker inspect container_id | grep Mounts -A 20 # 挂载目录 当我们需要访问宿主机的数据时,就需要把宿主机目录挂载到容器中,在新建容器时使用docker run -v参数即可挂载目录,例如: docker run -dit --name my_ubuntu -v /hdd:/workspace/hdd chasonlee/ubuntu_demo:latest -v代表挂载目录,宿主机目录和容器目录用:分开,如果需要挂载多个目录,继续多写几个-v及其对应目录即可。 /hdd是宿主机目录,必须是绝对路径。 /workspace/hdd是容器里面映射的目录,必须是绝对路径,如果目录不存在会自动创建。 # Docker 快速安装与搭建 Mysql 环境 下载 Mysql 镜像 docker pull mysql:5.7 先以简单的方式启动: docker run -d --name mysql -p 4406:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7 命令执行完成后,你也可以通过 docker ps 命令来确认下容器是否启动成功。若成功,我们需要将容器中的目录文件复制到宿主机中,分别包括: mysql 配置文件; 数据存储目录,以便挂载(PS: 若不挂载到宿主机,每次启动容器数据都会丢失) 将容器中的 mysql 配置文件复制到宿主机中指定路径下,路径你可以根据需要,自行修改 docker cp mysql:/etc/mysql/mysql.conf.d/mysqld.cnf /usr/local/docker/mysql/config/mysqld.cnf 将容器中的 mysql 存储目录复制到宿主机中 docker cp mysql:/var/lib/mysql/ /usr/local/docker/mysql/data 完成这一切后,让我们将刚刚运行的容器删除掉。 docker rm -f mysql 接下来,正式运行 Mysql 容器: docker run -idt --name mysql -p 4406:3306 -v /usr/local/docker/mysql/config/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -v /usr/local/docker/mysql/data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7 其他不变,额外添加了两个挂载子命令: -v /usr/local/docker/mysql/config/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf: 将容器中 /etc/mysql/mysql.conf.d/mysqld.cnf 配置文件挂载到宿主机的 /usr/local/docker/mysql/config/mysqld.cnf 文件上; -v /usr/local/docker/mysql/data:/var/lib/mysql: 将容器中 /var/lib/mysql 数据目录挂载到宿主机的 /usr/local/docker/mysql/data 目录下。 # Docker 安装搭建 Redis 环境 下载 Redis 镜像 docker pull redis:alpine 运行 Redis 容器 docker run -p 6379:6379 --name redis -v /usr/local/docker/redis/redis.conf:/etc/redis/redis.conf -v /usr/local/docker/redis/data:/data -d redis:alpine redis-server /etc/redis/redis.conf --appendonly yes 连接 redis: docker run -it redis:alpine redis-cli -h 172.17.0.1 # Docker 快速安装与搭建 MongoDB 环境 下载 MongoDB 镜像 docker pull mongo:4 运行 mongoDB 镜像 docker run -d --name mongo -v /usr/local/docker/mongo/configdb:/data/configdb -v /usr/local/docker/mongo/data:/data/db -p 27017:27017 mongo:4 --auth 添加管理员账号 docker exec -it mongo mongo admin 然后,创建一个拥有最高权限 root 账号 db.createUser({ user: 'admin', pwd: '123456', roles: [ { role: "root", db: "admin" } ] }); 用新创建的 root 账户连接,测试一下 docker run -it --rm --link mongo:mongo mongo mongo -u admin -p 123456 --authenticationDatabase admin mongo/admin # 启动停止容器 下面的 my_ubuntu 可以改成 CONTAINER ID 容器停止时,可以启动容器: docker start my_ubuntu 容器正在运行时,也可以停止容器: docker stop my_ubuntu # 删除容器 下面的 my_ubuntu 可以改成 CONTAINER ID 当容器已经停止时,可以直接删除容器: docker rm my_ubuntu 当容器还在运行,可以强制删除容器: docker rm -f my_ubuntu 如果当前有很多已经停止的容器,一个命令即可清空所有已停止容器: docker container prune # 基于已有的容器,创建一个新的镜像 通过如下命令来创建: docker container commit 支持的子命令如下: -a, --author="": 作者信息; -c, --change=[]: 可以在提交的时候执行 Dockerfile 指令,如 CMD、ENTRYPOINT、ENV、EXPOSE、LABEL、ONBUILD、USER、VOLUME、WORIR 等; -m, --message="": 提交信息; -p, --pause=true: 提交时,暂停容器运行 [root@VM_0_15_centos ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 671a82a3b2de mysql:5.7 "docker-entrypoint.s…" About an hour ago Up About an hour 33060/tcp, 0.0.0.0:4406->3306/tcp mysql [root@VM_0_15_centos ~]# [root@VM_0_15_centos ~]# docker container commit -m "add base DB data" -a "liangguojun" 671a82a3b2de testmysql:1.0 sha256:e05f32ea8c9e974beb545c45a14ac321f584bec89725792ad16ed78c8883fd9a [root@VM_0_15_centos ~]# [root@VM_0_15_centos ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE testmysql 1.0 e05f32ea8c9e 7 seconds ago 448MB jumpserver/jms_all latest 5f257513bfe3 5 days ago 1.48GB mysql 5.7 a4fdfd462add 11 days ago 448MB nginx latest 9beeba249f3e 2 weeks ago 127MB