linux(vmware15 centos7)中Docker安装
一、Docker卸载
1.查看已安装的docker安装包
$yum list installed|grep docker 执行后的结果
docker.x86_64 2:1.12.6-61.git85d7426.el7.centos @extras
docker-client.x86_64 2:1.12.6-61.git85d7426.el7.centos @extras
docker-common.x86_64 2:1.12.6-61.git85d7426.el7.centos @extras
2: 删除安装包
yum –y remove docker.x86_64
yum –y remove docker-client.x86_64
yum –y remove docker-common.x86_64
3:删除docker 镜像
rm -rf /var/lib/docker
二、Docker安装
1: 使用yum命令进行安装
yum install -y docker
备注:-y 表示不询问 使用默认配置进行安装,等待提示 完毕!
2.查看是否安装成功
yum list installed | grep docker
备注:命令为 查看yum安装完成文件列表 并 筛选docker安装信息 如下
3.启动docker服务
systemclt start docker
如果上面不行可以试用() sudo systemctl start docker sudo systemctl enable docker
4.验证是否安装成功
docker version
三、Docker的一些常规操作命令
1. 查看docker版本 docker -v
2. 启动与停止docker命令
systemctl命令是系统服务管理器指令,它是 service 和 chkconfig 两个命令组合
启动docker : systemctl start docker
停止docker : systemctl stop docker
重启docker: systemctl restart docker
查看docker状态 systemctl status docker
开机启动: systemctl enable docker
查看docker的概要信息: docker info (可以用于测试docker是否启动)
查看docker命令的帮助文档 : docker --help
3.image镜像相关的操作
查看本地镜像: docker images
查询搜索注册中心中的镜像 : docker search 镜像的名称
注释:原始镜像一般先来自于官方的注册中心(类似于Maven的*仓库),可以查询有没有需要的镜像
记住查询出来的name的名字即可准备下载
n NAME :仓库名称
n DESCRIPTION:镜像的描述
n STARS :用户评价,反应一个镜像的受欢迎度
n OFFICIAL :是否官方
AUTOMATED :自动构建,表示该镜像有Doker Hub自动构建流程创建的
下载拉取镜像: docker pull 镜像的名称(例如:docker pull centos:7 )
删除本地镜像: docker rmi 镜像的编号(image id) /镜像的名字:版本标记:删除指定的镜像
docker rmi ' docker images -q ' 删除所有的镜像
国内镜像注册中心的使用
步骤:(1)编辑文件 vi /etc/docker/daemon.json // 如果该文件不存在就手动创建;说明:在centos7.x下,通过vi。
(2)在该文件中添加registry-mirrors键值
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
(3)一定要重启docker服务: systemctl daemon-reload
systemctl restart docker
注解:如果重启docker后无法加速,可以重启os
然后通过docker pull命令下载镜像。
四、Container容器操作
1.容器查看
查看正在运行的容器: docker ps
查看所有的容器(包含停止的): docker ps -a
查看最后一次运行的容器的信息: docker ps -l
查看停止了容器列表: docker ps -f status=exited
2.创建与启动容器
交互式容器:
步骤:(1)创建一个交互式容器,并取名为mycentos
docker run -it --name=mycentos centos:7.5.1804 /bin/bash
注解:① 如果镜像centos:7
本地没有下载,自动会到注册中心寻找,并自动下载。
② 镜像的名字如果是官方的前缀名称空间docker.io
,则可以省略名称空间,如:docker.io/centos
可以省略为centos
③ /bin/bash
相当于windows下的cmd,即容器启动后,自动进入到容器的命令行了
④ 自动进入到容器中的系统
(2)退出当前的容器 :使用exit 或者ctrl +d 退出当前的容器
守护式容器:
步骤:(1)创建一个容器命名为mycentos2
docker run -id --name=mycentos2 centos:7 /bin/bash
(2)登录守护式容器: docker exec -it container_name (或者 container_id) /bin/bash(exit退出时,容器不会停止 )
方式1:使用名字进入
[root@pinyoyougou-docker docker]# docker exec -it mycentos2 /bin/bash
[root@2c32a5cb4a71 /]#
方式2:使用id进入
[root@pinyoyougou-docker docker]# docker exec -it 2c32a5cb4a71 /bin/bash
[root@2c32a5cb4a71 /]#
注释:
创建并启动容器命令:docker run
-i:表示进入容器
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
--name :为创建的容器命名,如果不加该参数,则是随机值,不建议。
-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在 宿主机上做修改,然后共享到容器上。
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容 器)。
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
3.停止和启动容器
停止正在运行时的容器(守护式容器) : docker stop $CONTAINER_NAME/ID
启动以运行过的容器 : docker start $CONTAINER_NAME/ID
重启容器: docker restart docker restart $CONTAINER_NAME/ID
4.文件拷贝
将文件拷贝到容器中: docker cp 需要拷贝的文件或目录 容器名称:容器目录
将文件从容器中拷贝出来: docker cp 容器名称:容器目录 要拷贝的容器或者目录
5.目录(映射)挂在
我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器,创建容器时额外添加-v
参数 后边为宿主机目录:容器目录
如果你共享的是多级的目录,可能会出现权限不足的提示。 这是因为CentOS7中的安全模块selinux把权限禁掉了,我们需要添加参数 --privileged=true 来解决挂载的目录没有权限的问题
【补充】
挂载宿主机已存在目录后,在容器内对其进行操作,报“Permission denied”。
可通过两种方式解决:
1> 以特权方式启动容器
指定--privileged参数
如:# docker run -it --privileged=true -v /test:/soft centos /bin/bash
docker run -it -v /usr/local/myhtml:/usr/local/myhtml --privileged=true --name=mycentos4 centos: /bin/bash
2> 关闭selinux
临时关闭:setenforce 0
永久关闭:修改/etc/selinux/config
或/etc/sysconfig/selinux
文件,将SELINUX的值设置为disabled。
#默认值是enforcing
SELINUX=disabled
#注释掉这行(可选)
#SELINUXTYPE=targeted
保存,退出,重启系统,不想重启,可以使用:setenforce 0
,使配置立即生效
6.查看容器内部的ip
要使用容器,需要在外面宿主机器上去映射容器内部ip
方法:(1)查看容器运行的各种数据: docker inspect 容器的名字
·
(2)直接输出容器的ip地址: docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称
7.删除容器:
删除指定的容器: docker rm $CONTAINER_ID/NAME 注意,只能删除停止的容器
强制删除(慎用): docker rm -f 容器的名称
先停止,再删除: ① docker stop 容器名称 ② docker rm 容器名称 ③ docker ps -a 查看所有的容器
删除所有的容器: ① docker rm ' docker ps -a -q ' 或者 ② docker rm -f ' docker ps -a -q '
五、Docker中部署一些应用软件
1.MySQL 部署
(1)拉取mysql的镜像
① docker pull mysql:5.7.23 或者 ② docker pull mysql:5
2.创建mysql容器并映射端口和改密码
docker run -di --name=my_mysql -p : -e MYSQL_ROOT_PASSWORD= mysql
注解:-p 代表端口映射,格式为 宿主机映射端口:容器运行端口
-e 代表添加环境变量 MYSQL_ROOT_PASSWORD是root用户的登陆密码
3.进入mysql容器,登录mysql
进入容器 : docker exec -it my_mysql /bin/bash
登录mysql: mysql -u root -p
注解:mysql8的默认密码加密策略发生改变,之前的一些客户端无法登录,解决方案:
使用mysql的原生命令进去,使用之前的密码策略重新修改密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码'; #本地登录(如果用原生的命令行的话,不用改)
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
#远程登录
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
六、tomcat部署
1.拉取tomcat镜像: docker pull docker pull tomcat:8.5.34-jre8
2.创建tomcat的容器,并映射端口:
docker run -id --name=my_tomcat -p 9001:8080 -v /usr/local/myhtml:/usr/local/tomcat/webapps tomcat:8.5.34-jre8
或者
docker run -id --name=my_tomcat3 -p 9003:8080 -v /usr/local/myhtml:/usr/local/tomcat/webapps --privileged=true tomcat:8.5.34-jre8
3.部署web应用
将程序拷贝到宿主机的/usr/local/myhtml
下面,比如:再建立目录myapp
,里面编辑一个index.html
页面作为测试主页,可能需要修改配置文件,比如mysql的数据库连接ip(是容器内网ip,如:172.17.0.2)等。提示:docker容器之间类似于内部局域网效果,互相之间可以通信(测试:地址栏输入:http://192.168.201.111:9001/myapp)
七、redis部署
1.拉取镜像: docker pull redis:4.0.11
2.创建容器: docker run -di --name=my_redis -p 6379:6379 redis:4.0.11
3.测试: redis-cli -h 192.168.247.135 –p 6379 (在你的本地电脑命令提示符下,用window版本redis测试)
八、备份与迁移
应用场景:如果在测试环境下,你配置好的一个镜像,需要放到正式环境下运行、或者要备份一份,回头再用、或者要做集群,弄多份一模一样的容器。需要将容器打包备份为自己的镜像
1.容器保存为镜像:
docker commit my_tomcat itcast.cn/tomcat:1.0.1 或者 docker commit my_tomcat mytomcat:1.0.1
2.镜像备份:
docker save -o itcast_tomcat-1.0.1.tar itcast.cn/tomcat:1.0.1 或者 docker save -o itcasttomcat.tar mytomcat
注解:-o 输出到的文件
执行后,运行ls命令即可看到打成的tar包
3.镜像回复 :docker load -i itcast_tomcat1.2.tar -i 输入的文件
一些参考的博文
https://blog.csdn.net/t594362122/article/details/78642886(1)
https://www.cnblogs.com/yufeng218/p/8370670.html(2)
https://blog.csdn.net/qq_22211217/article/details/80414227(3)
https://blog.csdn.net/we_shell/article/details/38368137(4)
https://www.cnblogs.com/qgc1995/archive/2018/08/29/9553572.html