- CE 即社区版(免费,支持周期 7 个月)
- EE 即企业版,强调安全,付费使用,支持周期 24 个月
注意: CentOS 7 满足最低内核的要求,所以我们在CentOS 7安装Docker。
- 卸载(可选)
yum remove docker
docker-client
docker-client-latest
docker-common
docker-latest
docker-latest-logrotate
docker-logrotate
docker-selinux
docker-engine-selinux
docker-engine
docker-ce
- 安装
安装yum工具
yum install -y yum-utils
device-mapper-persistent-data
lvm2 --skip-broken
更新本地镜像源
# 设置docker镜像源
yum-config-manager
--add-repo
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's/download.docker.com/mirrors.aliyun.com/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
yum makecache fast
最后,开始安装
yum install -y docker-ce
通过命令启动docker
systemctl start docker # 启动docker服务 systemctl stop docker # 停止docker服务 systemctl restart docker # 重启docker服务
- 注意打开端口,我直接把我的全部打开了
- 查看docker版本:docker -v
-
拉取镜像:docker pull xxx(参考:DockerHub)
-
查看拉取到的镜像:docker images
-
使用docker save导出镜像到磁盘 docker save -o [保存的目标文件名称] [镜像名称] 例子:docker save -o nginx.tar nginx:latest
-
删除本地的xxx镜像:docker rmi xxx:xxx 例子:docker rmi nginx:latest
-
加载本地文件:docker load -i xxx.tar 例子:docker load -i nginx.tar
小练习
- 创建并运行xxx容器的命令:
docker run --name containerName -p 80:80 -d xxx:xxx(比如nginx:latest)
命令解读:
- docker run :创建并运行一个容器
- –name : 给容器起一个名字,比如叫做mn
- -p :将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
- -d:后台运行容器
- xxx:镜像名称,例如nginx
查看正在运行中的容器:docker ps 查看所有容器,包括暂停的:docker ps -a
需求:进入Nginx容器,修改HTML文件内容,添加“传智教育欢迎您”
提示:进入容器要用到docker exec命令。
步骤:
1)进入容器。进入我们刚刚创建的nginx容器的命令为:
docker exec -it mn bash
命令解读:
-
docker exec :进入容器内部,执行一个命令
-
-it : 给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互
-
mn :要进入的容器的名称
-
bash:进入容器后执行的命令,bash是一个linux终端交互命令(容器内没有vi命令)
cd /usr/share/nginx/html
sed -i -e 's#Welcome to nginx#随风欢迎你#g' -e 's###g' index.html
-
Ctrl+P+Q:退出容器
-
查看容器日志的命令:
- docker logs xxx(自己起的容器名)
- 添加 -f 参数可以持续查看日志docker logs -f xxx(自己起的容器名)
- Ctrl+C退出(-f的)
-
数据卷的作用:
- 将容器与数据分离,解耦合,方便操作容器内数据,保证数据安全
-
什么是数据卷
- 数据卷volume是一个虚拟目录,指向宿主机文件系统中的某个目录。
这样,对容器的一切操作都会在数据卷对应的宿主机目录了。
- 数据卷volume是一个虚拟目录,指向宿主机文件系统中的某个目录。
-
数据集操作命令
数据卷操作的基本语法如下:
docker volume [COMMAND]
-
docker volume命令是数据卷操作,根据命令后跟随的command来确定下一步的操作:
- create 创建一个volume
- inspect 显示一个或多个volume的信息
- ls 列出所有的volume
- prune 删除未使用的volume
- rm 删除一个或多个指定的volume
-
挂载数据卷
我们在创建容器时,可以通过 -v 参数来挂载一个数据卷到某个容器内目录
--name mn -v html:/root/html -p 8080:80 nginx
移除自己停用的容器:docker rm -f id(可以通过docker ps -a 进行查看)案例-给nginx挂载数据卷
需求:创建一个nginx容器,修改容器内的html目录内的index.html内容
分析:上个案例中,我们进入nginx容器内部,已经知道nginx的html目录所在位置/usr/share/nginx/html ,我们需要把这个目录挂载到html这个数据卷上,方便操作其中的内容。
提示:运行容器时使用 -v 参数挂载数据卷
步骤:
① 创建容器并挂载数据卷到容器内的HTML目录
docker run --name mn -v html:/usr/share/nginx/html -p 80:80 -d nginx
② 进入html数据卷所在位置,并修改HTML内容
# 查看html数据卷的位置 docker volume inspect html # 进入该目录 cd /var/lib/docker/volumes/html/_data # 修改文件 vi index.html
- 给MySQL挂载本地目录
docker run
--name mysql
-e MYSQL_ROOT_PASSWORD=922815
-p 3306:3306
-v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf
-v /tmp/mysql/data:/var/lib/mysql
-d
mysql:5.7.25
要是运行不起来可以尝试删除之前数据卷conf文件夹里面的东西
5.Dockerfile自定义镜像
- 镜像结构
- Dockerfile语法
构建自定义的镜像时,并不需要一个个文件去拷贝,打包。
我们只需要告诉Docker,我们的镜像的组成,需要哪些baseImage、需要拷贝什么文件、需要安装什么依赖、启动脚本是什么,将来Docker会帮助我们构建镜像。
Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。每一个指令都会形成一层Layer。
- 构建java项目
- 新建文件夹demo
- 拷贝jar包到demo里面
- 放jdk8.tar.gz到demo里面
- 将Dockerfile放到demo里面
# 指定基础镜像 FROM ubuntu:16.04 # 配置环境变量,JDK的安装目录 ENV JAVA_DIR=/usr/local # 拷贝jdk和java项目的包 COPY ./jdk8.tar.gz $JAVA_DIR/ COPY ./docker-demo.jar /tmp/app.jar # 安装JDK RUN cd $JAVA_DIR && tar -xf ./jdk8.tar.gz && mv ./jdk1.8.0_144 ./java8 # 配置环境变量 ENV JAVA_HOME=$JAVA_DIR/java8 ENV PATH=$PATH:$JAVA_HOME/bin # 暴露端口 EXPOSE 8090 # 入口,java项目的启动命令 ENTRYPOINT java -jar /tmp/app.jar
- 将demo放到我们的centos系统里面
- 运行:docker build -t javaweb:1.0
虽然我们可以基于Ubuntu基础镜像,添加任意自己需要的安装包,构建镜像,但是却比较麻烦。所以大多数情况下,我们都可以在一些安装了部分软件的基础镜像上做改造。
例如,构建java项目的镜像,可以在已经准备了JDK的基础镜像基础上构建。
需求:基于java:8-alpine镜像,将一个Java项目构建为镜像
实现思路如下:
-
① 新建一个空的目录,然后在目录中新建一个文件,命名为Dockerfile
-
② 拷贝课前资料提供的docker-demo.jar到这个目录中
-
③ 编写Dockerfile文件:
-
a )基于java:8-alpine作为基础镜像
-
b )将app.jar拷贝到镜像中
-
c )暴露端口
-
d )编写入口ENTRYPOINT
内容如下:
FROM java:8-alpine COPY ./app.jar /tmp/app.jar EXPOSE 8090 ENTRYPOINT java -jar /tmp/app.jar
-
-
④ 使用docker build命令构建镜像
-
⑤ 使用docker run创建容器并运行
随风



