Docker快速入门
Docker简介
Docker是一个开源的容器引擎,它可以帮助我们更快地交付应用。Docker可将应用程序和基础设施层隔 离,并且能将基础设施当作程序一样进行管理。使用Docker,可更快地打包、测试以及部署应用程序, 并可减少从编写到部署运行代码的周期。
Docekr架构
Docker daemon是一个运行在宿主机(DOCKER_HOST)的后台进程。我们可通过Docker客户端与之 通信。
-
Client(Docker客户端)
Docker客户端是Docker的用户界面,它可以接受用户命令和配置标识,并与Docker daemon通信。图 中,docker build等都是Docker的相关命令。
-
Images(Docker镜像)
Docker镜像是一个只读模板,它包含创建Docker容器的说明。它和系统安装光盘有点像——我们使用系 统安装光盘安装系统,同理,我们使用Docker镜像运行Docker镜像中的程序。
-
Container(容器)
Docker Registry是一个集中存储与分发镜像的服务。我们构建完Docker镜像后,就可在当前宿主机上运 行。但如果想要在其他机器上运行这个镜像,我们就需要手动拷贝。此时,我们可借助Docker Registry 来避免镜像的手动拷贝。
一个Docker Registry可包含多个Docker仓库;每个仓库可包含多个镜像标签;每个标签对应一个 Docker镜像。这跟Maven的仓库有点类似,如果把Docker Registry比作Maven仓库的话,那么Docker 仓库就可理解为某jar包的路径,而镜像标签则可理解为jar包的版本号。
Docker安装启动
运行安装环境
采用Linux操作系统,版本为:Centos7.0 64位,Docker采用CE版:18.06.0.ce-3
Docker安装过程
-
下载Docker-CE
rpm安装包
https://download.docker.com/linux/centos/7/x86_64/stable/Packages/ 注意下载版本要和操作系统版本对应。
docker-ce-18.06.0.ce-3.el7.x86_64.rpm
-
安装Docker
上传 docker-ce-18.06.0.ce-3.el7.x86_64.rpm 到opt
执行命令: yum install -y docker-ce-18.06.0.ce-3.el7.x86_64.rpm
注意:确保linux服务器处于联网状态。
-
启动与停止Docker
启动docker:systemctl start docker
停止docker:systemctl stop docker
重启docker:systemctl restart docker
查看docker状态:systemctl status docker
- 验证Docker是否安装成功
执行命令:docker info
查看返回信息,能否查看到Docker相关信息
到此,Docker安装完毕!
Docker配置镜像加速器
国内访问Docker Hub的速度很不稳定,有时甚至出现连接不上的情况。我们来为Docker配置镜像加速 器,从而解决这个问题。目前国内很多云服务商都提供了镜像加速的服务。 常用的镜像加速器有:阿里云加速器DaoCloud加速器等。
各厂商镜像加速器的使用方式大致类似,以阿里云加速器为例进行讲解。
注册阿里云账号后,即可在阿里云控制台(https://cr.console.aliyun.com/#/accelerator)
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://ksc53x4t.mirror.aliyuncs.com"]
}
:wq
重启docker守护程序
systemctl daemon-reload
重启docker服务
systemctl restart docker
查看docker容器信息
docker info
查看最后倒数第二行出现如下内容说明配置成功
Registry Mirrors:
https://j4pan1gm.mirror.aliyuncs.com
docker镜像操作的常用指令
搜索命令
- 通过镜像仓库搜索 Docker镜像仓库网址:https://hub.docker.com/search?q=&type=image
- docker search 镜像名称
下载镜像
docker pull 镜像名称 //查询最近的版本
docker pull 镜像名称:版本标签
查看本地镜像
docker images
删除镜像
docker rmi tomcat:8.5.57-jdk8-openjdk-slim //通过镜像名:版本号
或
docker rmi b1a27cee0cec //通过IMAGE ID删除
保存镜像为文件
docker save -o /root/tomcat.tar tomcat:8.5.57-jdk8-openjdk-slim
// -o /root/tocmat.tar 保存为文件的地址
把保存的镜像备份文件恢复成镜像
docker load -i /root/tomcat.tar
Docker容器操作常用指令
使用镜像新建一个容器
docker run
1. 创建并运行一个java容器,打印helloworld!
docker run java:8 /bin/echo 'Hello World!'
2. 创建一个Centos容器
docker run -dti --name=自拟 centos:centos7 /bin/bash
-d 表示守护式容器(用户退出容器后,容器依然可以正常运行)
-i 运行容器
-t 交互 后面跟交互shell脚本 /bin/bash
centos:centos7 镜像名称
3. 创建一个有网络使用容器
如:创建一个容器nginx 端口为 80
-p 端口映射 宿主机端口:容器端口
列出容器
列出当前正在运行的容器
docker ps
列出当前全部容器
docker ps -a
列出当前容器的所有编号
docker ps -a -q
停止容器
docker stop 容器的names
docker stop 容器的CONTAINER ID
强制停止容器
docker kill 容器名称或容器编号
重启容器
docker restart 容器名称或者容器编号
如何进入到容器
docker exec -it c1 /bin/bash
退出容器
exit
从宿主机拷贝文件到容器
docker cp 宿主文件路径 容器名:复制到容器的路径
从容器拷贝文件到宿主机
docker cp 容器名:容器路径 复制到的宿主路径
挂载宿主机的制定目录到容器(其中 --privileged 是可选的)
(如果你共享的是多级的目录,可能会出现权限不足的提示。这是因为CentOS7中的安全模块selinux把
权限禁掉了,我们需要添加参数 --privileged=true 来解决挂载的目录没有权限的问题)
docker run -di --name=自拟镜像名称 -v 宿主文件目录:/容器目录 --privileged centos:centos7
删除容器
docker rm 容器名称或者编号 //注意 不能删除正在运行中容器, 需要停掉才可以删除
查看容器ip
docker inspect n1 //输出的内容较多
docker inspect --format='{{.NetworkSettings.IPAddress}}' n1 //只输出ip
查看容器日志输出
docker logs 容器名称 查看日志
docker logs --tail="2" 容器名称 查看日志 左后2行。
Java开发者Docker常用镜像容器创建
JDK部署
-
拉取JDK镜像
docker pull java:8 -
创建JDK容器
docker run -di --name jdk1 java:8
- 进入容器验证Java环境
docker exec -it jdk1 /bin/bash
java -version
MySQL部署
-
拉取MySQL镜像
docker pull mysql:5.7 -
创建MySQL容器
第一种创建容器MySQL容器的方式
docker run -d --name=mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=scwdb mysql:5.7 -p 代表端口映射,格式为 宿主机映射端口:容器运行端口 -e MYSQL_ROOT_PASSWORD=123456 //表示设置root的密码为123456 -e MYSQL_DATABASE=scwdb //创建mysql数据库容器的同时初始化创建一个数据库 scwdb //开启mysql容器 docker exec -it mysql /bin/bash //登录mysql mysql -u root -p //赋外网访问权限 ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; //刷新权限 flush privileges;如上创建需要解决中文乱码问题乱码
乱码解决方案:
a. 进入mysql容器 修改配置文件/etc/mysql/mysql.conf.d/mysqld.cnf
注意 因为mysql容器中不能使用vi命令,所以我们将文件拷贝到宿主机后修改后在拷贝回去
b. docker cp mysql:/etc/mysql/mysql.conf.d/mysqld.cnf /root/
vi mysqld.cnf
找到[mysqld] 在其下添加编码处理
character-set-server=utf8
collation-server=utf8_general_ci
保存
c. docker cp /root/mysqld.cnf mysql:/etc/mysql/mysql.conf.d/mysqld.cnf
d. 重启容器 docker restart mysql
第二种创建容器MySQL容器的方式
创新容器同时创建表的时候,解决中文问题(使用挂载的方式,将刚刚解决乱码的mysqld.cnf 挂载下容
器中相应的位置)
docker run -d --name=mysql -p 33306:3306 -v
/root/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -e
MYSQL_ROOT_PASSWORD=123456 -eMYSQL_DATABASE=db mysql:5.7
第三种创建容器MySQL容器的方式
在创建mysql容器时候,执行初始化数据库脚本 (将scwdb 数据库导出, 其中不要勾选 添加创建数据库
语句 ,然后上传到 宿主机root目录)
docker run -d --name=mysql -p 33306:3306 -v
/root/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -v
/root/scwdb.sql://docker-entrypoint-initdb.d/mysql.sql -e
MYSQL_ROOT_PASSWORD=123456 --net=host -e MYSQL_DATABASE=db mysql:5.7
//开启mysql容器
docker exec -it mysql /bin/bash
//登录mysql
mysql -u root -p
//赋外网访问权限
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
//刷新权限
flush privileges;
-
连接MySQL容器数据库
远程连接mysql数据库只需要使用宿主机ip和端口33306就可以

浙公网安备 33010602011771号