docker安装(Linux)及常用命令

一、安装docker
1、卸载旧版本的docker
命令:sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
2、安装所需的软件包 yum-utils, yum-utils 提供了 yum-config-manager,并且 devicemapper 存储驱动需要 device-mapper-persistent-data 和 lvm2
命令:yum install -y yum-utils device-mapper-persistent-data lvm2
3、设置Docker的镜像仓库
命令:sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4、安装最新版本的docker ce
命令:yum install docker-ce
5、卸载docker软件包
命令:yum remove docker-ce
注意:docker安装需要当前的linux系统的内核版本高于3.10,所以在安装之前先查看一下linux系统的内核版本,查看linux内核版本的命令:uname -r

二、docker的常用命令
1、启动docker: systemctl start docker
2、停止docker: systemctl stop docker
3、重启docker: systemctl restart docker
4、查看docker状态: systemctl status docker
5、开机自动启动docker: systemctl enable docker
6、查看当前安装的 Docker 版本:docker version
7、查看 docker 帮助命令: docker --help
8、查看 docker 概要信息: docker info
9、从Docker Hub拉取镜像,命令格式:docker pull 镜像名:标签名
例如:docker pull mysql:5.6
10、列出docker下的已安装所有镜像:docker images
在这里插入图片描述
REPOSITORY:镜像所在仓库的名称
TAG:镜像标签(一般是版本号)
IMAGE ID:镜像ID
CREATED:镜像的创建日期
SIZE:镜像大小
11、只显示镜像ID:docker images -q
12、搜索镜像,命令格式:docker search + 镜像名称
例如:docker search centos
docker安装(Linux)及常用命令_第1张图片
13、重载docker的daemon.json(配置docker镜像加速器)配置文件:systemctl daemon-reload
14、删除某一个镜像:docker rmi 镜像ID
docker安装(Linux)及常用命令_第2张图片
15、获取所有镜像id:docker images -q
16、删除所有镜像 (是 `` 反单引号 ):docker rmi docker images -q

三、docker容器操作常用命令
1、查看正在运行容器:docker ps
2、查看所有的容器(启动与未启动的容器):docker ps -a
3、查询所有运行过的容器ID:docker ps -a -q
4、查看最后一次运行的容器:docker ps –l
5、查看停止的容器:docker ps -f status=exited
6、创建容器,命令格式:docker run [OPTIONS] 镜像名:标签名
创建容器 [OPTIONS] 常用的参数说明:
-i 表示交互式运行容器(就是创建容器后,马上会启动容器,并进入容器 ),通常与 -t 同时使用 。
-t 启动后会进入其容器命令行, 通常与 -i 同时使用; 加入 -it 两个参数后,容器创建就能登录进去。即
分配一个伪终端。
–name 为创建的容器指定一个名称 。
-d 创建一个守护式容器在后台运行,并返回容器ID;
这样创建容器后不会自动登录容器,如果加 -i 参数,创建后就会运行容器。
-v 表示目录映射, 格式为: -p 宿主机目录:容器目录
注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-p 表示端口映射,格式为: -p 宿主机端口:容器端口
例如:创建一个交互式容器并取名为 mycentos , ( /bin/bash 是linux中的命令解析器,会进入到容器里面命令行)
命令:docker run -it --name=mycentos centos:7 /bin/bash
PS:交互式容器:就是创建容器后,马上会启动容器,并进入容器
PS:守护式容器:后台运行的容器,创建后不会马上进入容器内部,需要通过 docker exec 命令进入
例一:创建交互式容器
在这里插入图片描述
例二:创建守护式容器
docker安装(Linux)及常用命令_第3张图片
7、退出并停止当前容器, 注意在容器内部的命令行执行:exit
PS:exit 针对通过 docker exec 进入的容器,只退出但不停止容器
8、退出但不停止当前容器(按快捷键,多按几次): Ctrl + p + q
9、进入正在运行的容器:docker exec -it 容器名称(或容器id) /bin/bash
docker安装(Linux)及常用命令_第4张图片
PS通过 docker exec 命令进入正在运行的容器后,使用 exit 命令退出容器,不会结束该容器,也就是 exit 后该容器还是正常运行状态,但是如果是创建容器的时候就进入容器了(也就是创建交互式的容器),此时使用 exit 命令不仅仅是退出了该容器,也结束了该容器。
10、启动容器:docker start 容器名称|容器id
docker安装(Linux)及常用命令_第5张图片
11、启动所有运行过的容器(注意:反单引号):docker start docker ps -a -q
docker安装(Linux)及常用命令_第6张图片
12、停止正在运行的容器:docker stop 容器名称|容器id
docker安装(Linux)及常用命令_第7张图片
13、停止所有在运行的容器:docker stop docker ps -a -q
docker安装(Linux)及常用命令_第8张图片

14、强制停止正在运行的容器(一般不用此,除非卡了):docker kill 容器名称|容器id
docker安装(Linux)及常用命令_第9张图片
15、将宿主机文件拷贝到容器内:docker cp 要拷贝的宿主机文件或目录 容器名称:容器文件或目录
docker安装(Linux)及常用命令_第10张图片
16、将容器内部的文件拷贝到宿主机:docker cp 容器名称:要拷贝的容器文件或目录 宿主机文件或目录
docker安装(Linux)及常用命令_第11张图片
17、数据目录挂载:docker run -id -v /宿主机绝对路径目录:/容器内目录 --name=容器名 镜像名
需求:将宿主机的/opt目录与容器内的/opt目录进行映射,当在宿主机 /opt 目录下创建一个文件 test.txt ,这个 test.txt 会自动同步到容器映射目录 /opt
实现:创建容器时,将 宿主机目录/opt 挂载 容器目录/opt
docker安装(Linux)及常用命令_第12张图片

PS:数据目录挂载:我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。
18、目录挂载只读(Read-only)权限:docker run -id -v /宿主机绝对路径目录:/容器内目录:ro --name=容器名 镜像名
docker安装(Linux)及常用命令_第13张图片
19、查看容器运行内部细节,比如可看容器的IP:docker inspect 容器名|容器id
docker安装(Linux)及常用命令_第14张图片
20、查看容器IP地址:docker inspect --format=’{{.NetworkSettings.IPAddress}}’ 容器名|容器id
在这里插入图片描述
21、删除指定的容器:docker rm 容器名称 | 容器ID
docker安装(Linux)及常用命令_第15张图片
22、删除所有容器(其中运行中的容器无法删除,所以先停再删):docker rm docker ps -a -q
docker安装(Linux)及常用命令_第16张图片
四、实战部署
1、MySQL部署
1.1、拉取MySQL镜像:docker pull mysql:5.7
docker安装(Linux)及常用命令_第17张图片
1.2、创建 MySQL 容器:docker run -id --name=docker_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
在这里插入图片描述
-p 代表端口映射,格式为 宿主机映射端口:容器运行端口
-e 代表添加环境变量, MYSQL_ROOT_PASSWORD 是 root 用户的登陆密码
PS:此处的 33306 端口是宿主机对应的端口,如果没有开通此端口,后面 1.4 步骤的时候是无法连接到 mysql 的,需要开通防火墙开放此端口;后面的 3306 端口是容器 docker_mysql 的运行端口,其实也就是 mysql 的默认端口。
1.3、进入MySQL容器, 登陆MySQL:docker exec -it docker_mysql /bin/bash
docker安装(Linux)及常用命令_第18张图片
1.4、远程登陆MySQL
docker安装(Linux)及常用命令_第19张图片
1.5、连接上 mysql 之后,就可以正常去建库建表了

2、Redis 部署
2.1、拉取Redis镜像:docker pull redis
docker安装(Linux)及常用命令_第20张图片
2.2、创建Redis容器:docker run -id --name=docker_redis -p 6379:6379 redis
PS:前面一个6379是docker所在服务器的映射端口,后面一个6379是redis容器的运行端口
在这里插入图片描述
2.3、使用本机的 Redis 图形化工具 Redis Desktop Manager 连接刚才创建 redis 容器
docker安装(Linux)及常用命令_第21张图片

3、Tomcat 部署
3.1、拉取tomcat镜像:docker pull tomcat:8
docker安装(Linux)及常用命令_第22张图片

3.2、创建tomcat容器:docker run -id --name=mxg_tomcat -p 8888:8080 -v /usr/local/project:/usr/local/tomcat/webapps --privileged=true tomcat:8
-p 表示地址映射, 宿主机端口号:容器运行端口号
-v 表示地址映射, 宿主机目录:容器映射目录
–privileged=true 如果映射的是多级目录,防止有可能会出现没有权限的问题,所以加上此参数
在这里插入图片描述
3.3、进入Tomcat容器,在容器中同步 hello.html 文件
docker安装(Linux)及常用命令_第23张图片
3.4、启动容器:docker start docker_tomcat
在这里插入图片描述
3.5、浏览器访问 tomcat 中的 hello.html 页面
docker安装(Linux)及常用命令_第24张图片
PS:47.103.16.47是宿主机ip,8888是宿主机映射的端口,对应tomcat容器的运行端口8080

四、容器的备份与迁移
1、查看容器是否有挂载目录:docker inspect --format=’{{.Mounts}}’ 容器名
docker安装(Linux)及常用命令_第25张图片
2、将容器保存为镜像
容器无挂载目录时保存为镜像:docker commit 容器名 新的镜像名:TAG
docker安装(Linux)及常用命令_第26张图片
容器有挂载目录时保存为镜像:
问题: 如果Docker对容器挂载了数据目录, 在将容器保存为镜像时,数据不会被保存到镜像中。
**原因:**因为宿主机与容器做了路径映射,再commit一个新的镜像时,该路径下的所有数据都会被抛弃,不会被保存到新镜像中。可通过 docker inspect --format=’{{.Mounts}}’ 镜像名 查看是否有目录挂载.
解决:
**目录挂载方法:**先把在宿主机的数据备份在某个目录下,在 docker run 的时候使用-v参数将宿主机上的
目录映射到容器里的目标路径中(tomcat是 /usr/local/tomcat/webapps ,mysql是 var/lib/mysql )
**拷贝方法:**先把在宿主机的数据备份在某个目录下,通过拷贝的方法 docker cp 将备份的数据复制进容
器里的目标路径中(tomcat是 /usr/local/tomcat/webapps ,mysql是 var/lib/mysql )。
目录挂载方法如下:
docker安装(Linux)及常用命令_第27张图片
拷贝方法如下:
docker安装(Linux)及常用命令_第28张图片
在这里插入图片描述
3、备份镜像:docker save -o 包名.tar 镜像名:标签
docker安装(Linux)及常用命令_第29张图片
4、恢复镜像:docker load -i 镜像备份的包名
docker安装(Linux)及常用命令_第30张图片

五、通过 Dockerfile 构建镜像
实例:通过 Dockerfile 构建 jdk 镜像
方式一:
docker安装(Linux)及常用命令_第31张图片
方式二:
docker安装(Linux)及常用命令_第32张图片

你可能感兴趣的:(Linux,docker,linux,容器)