常用命令
- docker images 查看本地镜像 初始是空的
- docker pull 镜像的名字 下载拉去镜像的名字
- docker rmi 镜像编号(image id)/镜像名字 删除指定镜像
- docker ps 查看正在运行的容器: 相当于linux下的 ll 或者 ls
- docker ps -a 查看所有的容器(包括运行和关闭的)
- docker run -id --name=bufanli centos:7 常见一个长期运行的容器(守护式容器)
- docker exec -it container_name /bin/bash (或者 container_id) (守护式容器的登录方式 exit退出时,容器不会停止)
- docker stop id或name 停止正在运行的容器(守护式容器)
- docker start id或name 启动已运行过的容器
- docker restart id或name 重启容器
- docker inspect name 查看容器内部的ip地址
- docker rmi id或name 删除镜像
使用exit命令 退出当前容器
l 启动docker:systemctl start docker
l 停止docker:systemctl stop docker
l 重启docker:systemctl restart docker
l 查看docker状态:systemctl status docker
l 开机启动:systemctl enable docker
容器技术是虚拟化的一种,容器也称之为虚拟系统,它一般虚拟的是操作系统软件。
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
安装
将Docker安装到CentOS上。注意:这里建议安装在CentOS7.x以上的版本,在CentOS6.x的版本中,安装前需要安装其他很多的环境而且Docker很多补丁不支持更新。
使用yum命令在线安装 :中间有一个停顿 输入y即可
centos7中:
yum install docker
yum -y install docker-io
安装成功后查看版本号:
docker -v
systemctl命令是系统服务管理器指令,它是 service 和 chkconfig 两个命令组合。
l 启动docker:systemctl start docker
l 停止docker:systemctl stop docker
l 重启docker:systemctl restart docker
l 查看docker状态:systemctl status docker
l 开机启动:systemctl enable docker
l 查看docker服务的概要信息:docker info
可以用来测试服务是否启动了
l 查看docker命令的帮助文档:docker --help
Image镜像操作
Docker容器启动是需要的一些文件,而这些文件就可以称为Docker镜像。
注册中心
Docker 用 Registry 来保存用户构建的镜像。Registry 分为公共和私有两种。Docker 公司运营公共的Registry 叫做 Docker Hub(下载镜像的位置)。用户可以在 Docker Hub 注册账号,分享并保存自己的镜像
常用操作
- docker images 查看本地镜像 初始是空的
- docker search 镜像名称 搜索本地镜像
- https://hub.docker.com/官网上可以显示细节
-
docker的语义化版本:
docker支持
x.y.z
的版本方式,能自动识别。比如拉取镜像操作:根据需要具体选一般用第一个
mysql:8.0.12----->下载的就是8.0.12
mysql:8.0 ------->下载8.0.最高版本 的版本
mysql:7 ------->下载7系列最高的版本
mysql:6 ------->下载6系列最高的版本...
mysql:latest ------->下载最高的版本,省略版本号时就是latest
mysql ------->下载最高的版本,省略版本号时就是latest -
下载(拉取)镜像
docker pull 镜像的名字
比如下载centos的7的版本,不加版本号会下载lastest版本。
docker pull centos:7 这个大小大概200兆大小
查看本地镜像列表,已经存在。
删除本地镜像
docker rmi 镜像编号(image id)/镜像名字:版本标记:删除指定镜像 通过docker images 命令查询要删除的镜像
docker rmi `docker images -q`:删除所有镜像
Container容器操作(核心)
Docker 可以帮助你构建和部署容器,你只需要把自己的应用程序或者服务打包放进容器即可。容器是基于镜像启动起来的,容器中可以运行一个或多个进程。我们可以认为,镜像是 Docker 生命周期中的构建或者打包阶段,而容器则是启动或者执行阶段。 容器基于镜像启动,一旦容器启动完成后,我们就可以登录到容器中安装自己需要的软件或者服务。
Docker 借鉴了标准集装箱的概念。标准集装箱将货物运往世界各地,Docker 将这个模型运用到自己的设计中,唯一不同的是:集装箱运输货物,而 Docker 运输软件。
和集装箱一样,Docker 在执行上述操作时,并不关心容器中到底装了什么,它不管是web 服务器,还是数据库,或者是应用程序服务器什么的。所有的容器都按照相同的方式将内容“装载”进去。
Docker 也不关心你要把容器运到何方:我们可以在自己的笔记本中构建容器,上传到Registry,然后下载到一个物理的或者虚拟的服务器来测试,在把容器部署到具体的主机中。
像标准集装箱一样,Docker 容器方便替换,可以叠加,易于分发,并且尽量通用。使用 Docker,我们可以快速的构建一个应用程序服务器、一个消息总线、一套实用工具、一个持续集成(CI)测试环境或者任意一种应用程序、服务或工具。我们可以在本地构建一个完整的测试环境,也可以为生产或开发快速复制一套复杂的应用程序栈。
容器查看
查看正在运行的容器: docker ps 相当于linux下的 ll 或者 ls
查看所有的容器(包括运行和关闭的) docker ps -a
查看最后一次运行的容器信息 docker ps -l
查看停止了的容器列表 docker ps -f status=exited
创建与启动容器
交互式容器(退出命令行容器会关闭)
创建一个交互式容器并取名为mycentos run 既创建又启动
docker run -it --name=mycentos centos:7 /bin/bash
自动进入到容器中的系统了:
提示:
1)如果镜像centos:7
本地没有下载,自动会到注册中心寻找,并自动下载。
2)镜像的名字如果是官方的前缀名称空间docker.io
,则可以省略名称空间,如:docker.io/centos
可以省略为centos
3)/bin/bash
相当于windows下的cmd,即容器启动后,自动进入到容器的命令行了。
使用exit命令 退出当前容器
[root@67f131336022 /]# exit
exit
[root@aaaa-docker docker]#
然后用ps -a 命令查看发现该容器也随之停止: docker ps -a
守护式容器(一般用这个)
创建一个守护式容器:如果对于一个需要长期运行的容器来说,我们可以创建一个守护式容器。命令如下(容器名称不能重复):
docker run -id --name=bufanli centos:7
使用 docker ps -a 查询容器是否运行
登录守护式容器方式:
docker exec -it container_name (或者 container_id) (exit退出时,容器不会停止)
方式1:使用名字进入
方式1:使用名字进入
[root@docker docker]# docker exec -it bushaungli /bin/bash
[root@2c32a5cb4a71 /]#
方式2:使用id进入
[root@ docker]# docker exec -it 2c32a5cb4a71 /bin/bash
[root@2c32a5cb4a71 /]#
停止与启动容器
停止正在运行的容器(守护式容器): docker stop $CONTAINER_NAME/ID 例如 docker stop mycentos (name)
启动已运行过的容器 docker start $CONTAINER_NAME/ID 例如 docker start mycentos
重启容器: docker restart $CONTAINER_NAME/ID
文件拷贝
如果我们需要将文件拷贝到容器内可以使用cp命令
docker cp 需要拷贝的文件或目录 容器名称:容器目录
docker cp test.txt mycentos2:/
进入到容器中,可以查看到刚拷贝的文件。 也可以将文件从容器内拷贝出来
docker cp 容器名称:容器目录 需要拷贝的文件或目录
如:拷贝文件,从容器到宿主机器的home目录:
#先退出容器 exit
docker cp mycentos2:/test.txt
目录(映射)挂载(文件夹的共享,一个更改另一个也更改,一个增加另一个也增加,相当于数据的共享)
我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。
创建容器时额外添加-v
参数 后边为宿主机目录:容器目录
如: docker run -id -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos centos:7
详细例子操作:
cd usr/local/
mkdir myhtml
vi index.html
#创建一个守护容器,并映射目录
[root@pxxx-docker myhtml]# docker run -id -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos centos:7
f5e14abc34724e64c13ab51d8943fa6283c1635fce44d94a835fb68c68cc350a
#进入容器
[root@pxxx-docker myhtml]# docker exec -it mycentos /bin/bash
[root@f5e14abc3472 /]#
如果你共享的是多级的目录,可能会出现权限不足的提示。
这是因为CentOS7中的安全模块selinux把权限禁掉了,我们需要添加参数 --privileged=true 来解决挂载的目录没有权限的问题
业务场景:
比如部署数据库或者网站,可以将数据库的数据文件或者网站的网页放到宿主机器上,容器只是映射读取。容易做成集群,没有数据同步的困扰。
查看容器内部IP地址
我们可以通过以下命令查看容器运行的各种数据
docker inspect mycentos
在信息中找"IPAddress": "172.17.0.3",
也可以直接执行下面的命令直接输出IP地址(格式过滤)
docker inspect --format='{{.NetworkSettings.IPAddress}}' mycentos
例如
[root@xxx-docker myhtml]# docker inspect --format='{{.NetworkSettings.IPAddress}}' mycentos
172.17.0.3
删除容器
l 删除指定的容器: 注意,只能删除停止的容器
docker rm $CONTAINER_ID/NAME
例如
#强制删除:小心使用。
[root@xxx-docker aa]# docker rm mycentos
Error response from daemon: You cannot remove a running container 3c04f7d6dd62264137d9cebdb9401c459dca2b7488204a0b6247a9ac158daa57. Stop the container before attempting removal or use -f
[root@xxx-docker aa]# docker rm -f mycentos
mycentos31
[root@xxx-docker aa]#
#先停止再删除
[root@xxx-docker myhtml]# docker rm mycentos
Error response from daemon: You cannot remove a running container 2c32a5cb4a719c6614cab58561ab6e7ebf35cf7067271a2d61112c0c69d0be2f. Stop the container before attempting removal or use -f
[root@xxx-docker myhtml]# docker stop mycentos
mycentos2
[root@xxx-docker myhtml]# docker rm mycentos
删除所有容器
docker rm `docker ps -a -q`
MySQL部署
拉取MySQL镜像
docker pull mysql:5.7.23
或
docker pull mysql:8
或
docker pull mysql
查看镜像
\
创建MySQL容器并映射端口和改密码
docker run -di --name=my_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
-p 代表端口映射,格式为 宿主机映射端口:容器运行端口 向外映射端口 通过linux访问
-e 代表添加环境变量 MYSQL_ROOT_PASSWORD是root用户的登陆密码
参考过程:
[root@xxx-docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/centos 7 5182e96772bf 7 hours ago 200 MB
docker.io/mysql latest 5fac85ee2c68 9 months ago 408.2 MB
[root@xxx-docker ~]# docker run -id --name=my_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
9431c8724f0f6f439d6d98e630cd57567a57bbac6c4c53199f7ee7c6be426658
进入MySQL容器,登陆MySQL
docker exec -it suyun_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';
#然后修改root权限
use mysql;
#在 mysql 数据库的 user 表中查看当前 root 用户的相关信息
select host, user, authentication_string, plugin from user;
#授权 root 用户的所有权限并设置远程访问
GRANT ALL ON *.* TO 'root'@'%';
#刷新权限列表
flush privileges;
#然后exit;退出
exit;
#再退出到宿主容器查看mysql的映射端口
firewall-cmd --zone=public --list-ports
#将mysql端口的防火墙打开 xxxxx 端口
firewall-cmd --zone=public --add-port=3363/tcp --permanent
#重新载入
firewall-cmd --reload
阿里云服务器的话需要配置规则
查看容器内部IP地址
将来要使用容器的时候,需要在外面宿主机器上去映射容器内部ip,就必须知道容器的ip是多少。
我们可以通过以下命令查看容器运行的各种数据
docker inspect dockerName
远程登陆MySQL
可视化下载地址
链接:https://pan.baidu.com/s/1A4aioOB8jletqOeQcJXfVQ 密码:q9uq 内置破解工具!!!启动后双击修改时间就好
(1)我们在我们本机的电脑上去连接虚拟机Centos中的Docker容器,这里192.168.247.130是虚拟机操作系统的IP
tomcat部署
拉取tomcat镜像
docker pull tomcat:8.5-jre8
docker run -id --name=bsl_tomcat -p xxxx:8080 -v /usr/local/myhtml:/usr/local/tomcat/webapps --privileged=true tomcat:8.5-jre8
Redis部署
拉取Redis镜像
docker pull redis:4
创建容器
docker run -di --name=bsl_redis -p xxxx:6379 redis:4
开启服务器防火墙对应的端口参考上面mysql 在阿里云配置规则 上面也有图
客户端测试
可视化工具下载
链接:https://pan.baidu.com/s/1c_gZKfBoMsByw-W_GZnW3g 密码:03hm
备份与迁移
场景:
如果在测试环境下,你配置好的一个镜像,需要放到正式环境下运行、或者要备份一份,回头再用、或者要做集群,弄多份一模一样的容器。需要将容器打包备份为自己的镜像。
容器保存为镜像
我们可以通过以下命令将容器保存为镜像
docker commit my_tomcat cn/tomcat:1.2
或
docker commit my_tomcat mytomcat
或指定版本
docker commit my_tomcat tomcat:1.1
docker commit my_tomcat com/tomcat:1.2
tomcat是容器名称
mytomcat
或cn/tomcat:1.2
是新的镜像名称
此镜像的内容就是你当前容器的内容,接下来你可以用此镜像再次运行新的容器
镜像备份
docker save -o tomcat1.2.tar cn/tomcat:1.2
或
docker save -o tomcat.tar mytomcat
例如:在当前目录中将某镜像打包成文件。
# docker save -o tomcat1.2.tar cn/tomcat:1.2
# ll
总用量 466400
-rw-------. 1 root root 1244 9月 3 2017 anaconda-ks.cfg
-rw-------. 1 root root 477583872 8月 7 12:30 tomcat.tar
-rw-r--r--. 1 root root 8 8月 7 10:42 test.txt
-o 输出到的文件
执行后,运行ls命令即可看到打成的tar包
6.3镜像恢复
如何导入到docker中?
首先我们先删除掉cn/tomcat:1.2镜像
然后执行此命令进行恢复
docker load -i tomcat1.2.tar
-i 输入的文件
执行后再次查看镜像,可以看到镜像已经恢复