Docker学习总结
什么是docker
Docker是一个快速交付应用、运行应用的技术
- 可以将程序及其依赖、运行环境一起打包为一个镜像,可以迁移到任意Linux操作系统。
- 运行时运用沙箱机制形成隔离容器,各个应用互不干扰
- 启动、移除都可以通过一行命令完成,方便快捷
docker与虚拟机
- docker是一个系统进程;虚拟机是在操作系统中的操作系统
- docker体积小,启动速度快、性能好;虚拟机体积大,启动速度慢,性能一般
镜像和容器
镜像(Image)
docker将应用程序及其所应用的依赖、函数库、环境、配置等文件打包到一起,称为镜像
容器(Container)
镜像中的应用程序运行后的进程就是容器,只是docker会给容器做隔离,对外不可见
Docker架构
docekr是一个cs架构的程序,由两部分组成:
- 服务端(server)
docker守护进程,负责处理docker的指令,管理镜像、容器等 - 客户端(client)
通过命令或restapi向docker服务端发送命令。可以在本地或远程向服务端发送命令。
Centos7安装Docker
卸载老版本
如果之前安装过旧版本的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
安装Docker
需要虚拟机联网,安装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 stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld
启动docker
systemctl start docker
配置docker的镜像加速
打开aliyun.com,登录,点击控制台----搜索‘容器镜像服务’-------点击‘镜像工具’-----镜像加速器----操作文档----centos
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://ctmq6649.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
Docker基本操作
镜像相关命令
- 镜像名称一般分为两部分:[repository]:[tag]
- 在没有指定tag时,默认时latest,代表的是最新版本的镜像
拉取镜像
去dockerhub上,搜索nginx,用pull命令拉取镜像
docker pull nginx
安装打包好的镜像
做好的镜像,想分享给其他人 ,可以通过docker save命令把镜像做成压缩包,然后给其他人,其他人通过docker load命令安装
打包镜像
# 镜像打包成tar文件
docker save -o nginx.tar nginx:latest
加载镜像
docker load -i nginx.tar
容器相关命令
docker run
docker run --name redis-test -p 6379:6379 -d redis:latest
–name | 指定容器名称 |
---|---|
-p | 指定端口映射 |
-d | 让容器后台运行 |
docker logs
docker logs
-f | 可以持续查看日志 |
---|---|
数据卷
docker volume [command]
create | 创建一个volume |
---|---|
inspect | 显示一个或多个volume信息 |
ls | 列出所有的volume |
prune | 删除未使用的volume |
rm | 删除一个或多个volume |
挂载数据卷
创建容器时,可以用-v参数挂载一个数据卷到某个容器目录
# -v 是把数据卷 html 挂载到/root/html这个目录下
docker run --name nginx -v html:/root/html -p 6379:6379 nginx
安装mysql
#拉取镜像
docker pull mysql
#创建目录及配置文件
mkdir -p /var/mysql/data
mkdir -p /var/mysql/conf
#自己的mysql的配置文件,配置自己补充
vi /var/mysql/conf/my.cnf
[mysqld]
skip-name-resolve
character_set_server=utf8
datadir=/var/lib/mysql
server-id=1000
#运行镜像
docker run \
--name mysql \
-v /var/mysql/data:/var/lib/mysql \
-v /var/mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-d \
mysql
#设置外网可以访问
# 进入mysql中设置密码
docker exec -it mysql /bin/bash
mysql -uroot -p
#输入密码后回车,进入mysql
use mysql;
alter user 'root'@'%' identified with mysql_native_password by '123456';
flush privileges;
Dockerfile自定义镜像
镜像是分层结构,每一层称为一个layer
- BaseImage:包含基本的系统函数库、环境变量、文件系统
- Entrypoint:入口,是镜像中应用启动的命令
- 其它:在BaseImage的基础上添加依赖、安装程序、完成整个应用的安装和配置
什么是Dockerfile
Dockerfile是一个文本文件,其中包含一个个的指令,用指令来说明执行什么操作来构建镜像。每个指令都回形成一个layer
指令 | 说明 | 示例 |
---|---|---|
FROM | 指定基础镜像 | FROM centos:6 |
ENV | 设置环境变量,可在后面指令使用 | ENV key value |
COPY | 考本本地文件到镜像的指定目录 | COPY ./mysql-5.7.rpm /tmp |
RUN | 执行Linux的shell命令,一般是安装过程的命令 | RUN yum install gcc |
EXPOSE | 指定容器运行时监听的端口,是给镜像使用者看的 | EXPOSE 8080 |
ENTERPOINT | 镜像中应用的启动命令,容器运行时调用 | ENTERPOINT java -jar xxxx.jar |
Dockerfile文件
#指定基础镜像
FROM centos:7.5
#配置环境变量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 ./jdk.1.8.0_144 ./java8
# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin
#暴露端口
EXPOSE 8090
# 入口 Java项目的启动命令
ENTERPOINT java -jar /tmp/app.jar
另外
别人已经弄好了安装好Java8后的镜像,我们可以直接拿来用,所以上面的Dockerfile可以改成
#拉取别人弄好的Java环境镜像
FORM java:8-alpine
#拷贝Java项目到指定的目录
COPY ./docker-demo.jar /tmp/app.jar
#暴露端口
EXPOSE 8090
# 入口 Java项目的启动命令
ENTERPOINT java -jar /tmp/app.jar
DockerCompose
什么是DockerCompose?
- DockerCompose可以基于Compose文件帮我们快速部署分布式应用,而无需手动一个个创建和运行容器
- Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。
安装DockerCompose
下载docker-compose
curl -L https://github.com/docker/compose/releases/download/1.29.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
给docker-compose执行权
chmod +x /usr/local/bin/docker-compose
配置Base自动补全名命令
#修改hosts文件
echo "199.232.68.133 raw.githubusercontent.com" >> /etc/hosts
#
curl -L https://raw.githubusercontent.com/docker/compose/1.29.1/contrib/completion/base/docker-compose > /etc/bash_completion.ddocker-compose