Docker是一个开源的容器引擎,它可以帮助我们更快地交付应用。Docker可将应用程序和基础设施层隔离,并且能将基础设施当作程序一样进行管理。使用Docker,可更快地打包、测试以及部署应用程序,并可减少从编写到部署运行代码的周期。
Docker官方网站:https://www.docker.com/
Docker 企业版、免费版
Docker daemon是一个运行在宿主机(DOCKER_HOST)的后台进程。我们可通过Docker客户端与之通信。
Docker客户端是Docker的用户界面,它可以接受用户命令和配置标识,并与Docker daemon通信。图中,docker build等都是Docker的相关命令。
Docker镜像是一个只读模板,它包含创建Docker容器的说明。它和系统安装光盘有点像——我们使用系统安装光盘安装系统,同理,我们使用Docker镜像运行Docker镜像中的程序。
容器是镜像的可运行实例。镜像和容器的关系有点类似于面向对象中,类和对象的关系。我们可通过Docker API或者CLI命令来启停、移动、删除容器。
Docker Registry是一个集中存储与分发镜像的服务。我们构建完Docker镜像后,就可在当前宿主机上运行。但如果想要在其他机器上运行这个镜像,我们就需要手动拷贝。此时,我们可借助Docker Registry来避免镜像的手动拷贝。
一个Docker Registry可包含多个Docker仓库;每个仓库可包含多个镜像标签;每个标签对应一个Docker镜像。这跟Maven的仓库有点类似,如果把Docker Registry比作Maven仓库的话,那么Docker仓库就可理解为某jar包的路径,而镜像标签则可理解为jar包的版本号。
采用Linux操作系统,版本为:Centos7.0 64位,Docker采用CE版:18.06.0.ce-3
下载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
执行命令: yum install -y docker-ce-18.06.0.ce-3.el7.x86_64.rpm
注意:确保linux服务器处于联网状态。
启动、关闭、重启、查看状态
systemctl start|stop|restart|status docker
启动之后查看信息
docker info
配置加速器
查看页面内容
https://cr.console.aliyun.com/cn-zhangjiakou/instances/mirrors
您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://bijw7xq9.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
镜像修改成功 查看 docker info 多了如下内容
查看镜像 查看中央仓库的镜像
搜索并下载 压缩版 Tomcat 镜像
docker pull tomcat:8.5.70-jdk8-openjdk-slim
下载镜像
dcker pull 镜像名:tag 名
查看本地镜像
docker images
对于镜像定位两种方式 ImageID 和 REPOSITORY:Tag
删除镜像(前提: 当前镜像没有创建容器)
docker rmi 镜像定位
将 docker 镜像保存到本地(操作系统中)
docker save -o 存储路径/文件名 镜像定位(建议使用 REPOSITORY:Tag 这种方式,保证名字是存在的)
将本地备份文件还原到docker中
docker load -i 存储路径/备份文件名
通过 镜像 创建容器
docker run 选项 【端口】 镜像定位
选项:
-i 运行容器 (必选)
-d 守护式容器,容器以守护进程的形式运行 (必选)
--name 容器名 (容器的定位标识 IMAGE)
-p 宿主主机端口:容器端口 用来定义宿主主机和容器端口的绑定
罗列容器
docker ps 选项
选项:
-a 罗列所有的容器 包括已经停止的容器
删除容器
docker rm 容器定位
说明:被删除的容器必须是退出状态
停止容器
docker stop 容器定位
强制停止容器
docker kill 容器定位
启动容器
docker start 容器定位
进入容器
docker exec -it 容器定位 /bin/bash
说明:
-t 和容器进行交互 必须搭配 /bin/bash
前提:
当前容器必须是启动状态
退出容器
exit
查看容器信息
docker inspect 容器定位
导入和导出容器
导出容器
docker export --output="导出的路径" 容器定位
导入容器
docker import 导入的路径
docker 导入导出 版本问题 经常出现问题
查看容器的日志
docker logs 容器定位
选项:
--tails="5" 最后5行
宿主主机和容器之间的交互
文件拷贝
宿主主机中完成的
从宿主主机拷贝文件到容器
docker cp 宿主主机文件路径 容器名:容器的文件路径
从容器拷贝文件到宿主主机
docker cp 容器名:容器的文件路径 宿主主机文件路径
挂载目录
将宿主主机的目录 挂载到 容器中 ,两个操作系统同时操作一个目录,必须在 创建容器的时候 进行挂载
属性说明:
-v 宿主主机被挂载的目录:容器中挂载的路径
-- privileged 被挂载的目录在容器中授予权限
docker run -id --name=mycentos01 -v /r**t/images/:/images --provileged centos:centos7
进入容器
docker exec -it mytomcat /bin/bash
修改 webapps.dist 为 webapps
退出 exit
#重启容器docker
docker stop mytomcat
docker start mytomcat
进入 8080 查看Tomcat
拉取JDK镜像
执行命令: docker pull java:8
创建JDK容器
执行命令:docker run -id --name myjdk java:8
说明:jdk安装的是openjdk,具体安装路径是:/usr/lib/jvm/java-1.8.0-openjdk-amd64
进入容器验证Java环境
docker exec -it jdk1 /bin/bash
java -version
拉取MySQL镜像
执行命令:docker pull mysql:5.7
创建MySQL容器
第一种创建容器MySQL容器的方式
远程连接mysql数据库只需要使用宿主机ip和端口3306就可以
使用属性之前需要加入 -e
docker run -d --name=mysql01 -p 33306:3306 -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=mydb mysql:5.7
-p 代表端口映射,格式为 宿主机映射端口:容器运行端口
-e MYSQL_ROOT_PASSWORD=root//表示设置root的密码为root
-e MYSQL_DATABASE=mydb//创建mysql数据库容器的同时初始化创建一个数据库 mydb
// 不赋予也可
//开启mysql容器
docker exec -it mysql01 /bin/bash
//登录mysql
mysql -u root -p
//赋外网访问权限
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
//刷新权限
flush privileges;
连接数据库 创建表 中文会出错
如上创建需要解决中文乱码问题乱码(默认是latin1)
show variables like 'character_set_%';
乱码解决方案:
a. 进入mysql01容器
docker exec -it mysql01 /bin/bash
修改配置文件
cd /etc/mysql/mysql.conf.d/mysqld.cnf
注意 因为mysql01容器中不能使用vi命令,所以我们将文件拷贝到宿主机后修改后在拷贝回去
b. docker cp mysql01:/etc/mysql/mysql.conf.d/mysqld.cnf /root/images
vi mysqld.cnf
找到[mysqld] 在其下添加编码处理
character-set-server=utf8
collation-server=utf8_general_ci
保存
c. docker cp /root/images/mysqld.cnf mysql01:/etc/mysql/mysql.conf.d/mysqld.cnf
d. 重启容器 docker restart mysql01
第二种创建容器MySQL容器的方式
创新容器同时创建表的时候,解决中文问题(使用挂载的方式,将刚刚解决乱码的mysqld.cnf 挂载下容器中相应的位置)
docker run -d --name=mysql02 -p 3306:3306 -v /root/images/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -e MYSQL_ROOT_PASSWORD=root -eMYSQL_DATABASE=mydb mysql:5.7
第三种创建容器MySQL容器的方式
在创建mysql容器时候,执行初始化数据库脚本 (将scwdb 数据库导出, 其中不要勾选 添加创建数据库语句 ,然后上传到 宿主机root目录)
连接MySQL容器数据库
挂钟挂载的操作 修改数据库配置文件
增加sql
docker run -d --name=mysql03 -p 3308:3306 -v /root/images/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -v /root/dongyimaidb.sql://docker-entrypoint-initdb.d/mysql.sql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=mydb mysql:5.7
//开启mysql容器
docker exec -it offcn_mysql /bin/bash
//登录mysql
mysql -u root -p
//赋外网访问权限
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
//刷新权限
flush privileges;
拉取Redis镜像
执行命令:docker pull redis:4.0.8
创建Redis容器
执行命令: docker run -id --name myredis -p 6379:6379 redis:4.0.8
Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像(centos或者ubuntu,即操作系统级别的镜像)并最终创建一个新的镜像。
(1) 创建一个目录: mkdir /usr/local/dockerjdk
(2) 上传 jdk-8u131-linux-x64.tar.gz到 /usr/local/dockerjdk/
(3) 创建一个 Dockerfile 文件 并编辑 vi Dockerfile 内容如下
FROM centos:centos7
MAINTAINER hbjava
RUN mkdir /usr/local/java
ADD jdk-8u201-linux-x64.tar.gz /usr/local/java/
ENV JAVA_HOME /usr/local/java/jdk1.8.0_201
ENV CLASSPATH $JAVA_HOME/lib
ENV PATH $JAVA_HOME/bin:$PATH
保存文件
(4) 创建镜像 为jdk1.8
docker build -t="myjdk:1.8" /root/dockerjdk
(5) 查看已经创建的镜像
docker images
(6) 使用自定义的镜像创建一个容器
docker run -id --name=myjava myjdk:1.8
(7) 查看创建的容器
docker ps
(8) 验证自定义容器jdk环境是否正常
docker exec -it myjava /bin/bash
java -version
ls
cd /usr/local/java/jdk1.8.0_201
(1) 创建目录 mkdir /root/dockertomcat
(2) 上传jdk tomcat 到文件中
(3) 创建Dockerfile vi Dockerfile 内容如下
FROM myjdk:1.8
RUN mkdir /usr/local/tomcat
ADD apache-tomcat-8.5.15.tar.gz /usr/local/tomcat
ENV CATALINA_HOME /usr/local/tomcat/apache-tomcat-8.5.15
ENV PATH $CATALINA_HOME/bin:$PATH
EXPOSE 8080
CMD ["/usr/local/tomcat/apache-tomcat-8.5.15/bin/catalina.sh","run"]
(4)创建镜像
docker build -t "mytomcat:8.5.15" /root/dockertomcat
(5)查看镜像
docker images
(6)创建容器
docker run -id --name mytomcat02 -p 9090:8080 mytomcat:8.5.15
(7)查看容器 docker ps
(8)访问: http://192.168.153.130:9090/