1.安装
yum -y install gcc
yum -y install gcc-c++
yum update(可不执行)
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast(可不执行)
yum -y install docker-ce docker-ce-cli containerd.io
安装完成
查看版本 docker -v
2.启动
systemctl start docker
ps -er|grep docker
docker version
3.卸载
systemctl stop docker
yum remove docker-ce docker-ce-cli containerd.io
rm -rf/var/lib/docker
rm -rf/var/lib/containerd
4.(安装阿里云镜像加速器: 登录阿里云容器镜像服务查看镜像加速服务
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [""]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker)
======================================
5.镜像命令(image)
docker images [-aq] #查看所有镜像 a:所有 q:只显示镜像ID
docker [--limit 5] search 镜像名 #查找镜像
docker rmi --f 镜像名[:TAG]/镜像ID //${docker imagers -aq #全部} #删除镜像
docker pull 镜像名[:TAG] // #拉镜像TAG版本号 docker pull nginx:latest
docker push 镜像名[:TAG] // #推镜像TAG版本号
docker system df #查看镜像容器/数据卷所占内存空间
(虚悬镜像 仓库 标签名都是<none> 没什么用)
docker export 容器id > 文件名.tar #容器备份
cat 文件名.tar | docker import - 镜像用户/镜像名:TAG版本号 #导入镜像
docker save -o 文件名.tar 镜像名[:TAG] //导出 docker save -o nginx.tar nginx:latest
dockers load -i 文件名.tar //创建镜像 dockers load -i nginx.tar
6.容器命令(containers)
创建容器并启动
============================
docker run
--name=容器名称
-i #以交互式运行容器 通常与-t一起使用
-t #为容器重新分配一个伪输入终端
-it /bin/bash
-d #后台运行,创建一个守护式
-p 80:80 #端口映射 [宿主机端口:docker暴露的端口]
-P #随机端口映射不用
-v 宿主机路径:容器内路径[:rw] #挂载数据卷不加在/var/lib/registry下;相当于备份数据,实现数据持久化;可以挂载多个
--privileged=true //怕文件不安全被禁止,放开权限
--restart always //参数能够使我们在重启docker时,自动启动相关容器。
-e #配置环境变量
镜像名[:TAG]
==============================
docker ps [-a] #罗列出所有的运行容器实例
docker logs [-f] 容器名/容器ID #日志监控
docker attach -it 容器名/容器ID #重新进入容器内部 直接进入容器终端 不会创建新的进程 exit退出容器停止
docker exec -it 容器名/容器ID /bin/bash #重新进入容器内部 在容器中打开新的终端 创建新的进程,exit 退出容器不会停止 (推荐使用)
docker start 容器名/容器ID
docker restart 容器名/容器ID
docker stop 容器名/容器ID
docker kill 容器名/容器ID
docker rm 容器名/容器ID //删除已经停止的容器
docker pause 容器名/容器ID //暂停
docker unpause 容器名/容器ID //恢复
docker top 容器名/容器ID #
docker cp 容器id:容器内路径 /拷贝到的路径 // 容器复制
docker export 容器id > 文件名.tar //容器备份
cat 文件名.tar | docker import - 镜像用户/镜像名:TAG版本号 //导入镜像
退出容器(run 进入容器)
exit 容器停止
ctrl+q+p 容器不停止
7.创建镜像
docker export 容器id > 文件名.tar #容器备份
cat 文件名.tar | docker import - 镜像用户/镜像名:TAG版本号 #导入镜像
docker commit -m="镜像信息" -a="作者" 容器ID 包名/镜像名[:TAG] #创建镜像
docker cp 容器id:容器内路径 /拷贝到的路径 # 容器复制
8.数据挂载
-v 宿主机路径:容器内路径[:rw] #挂载数据卷不加在/var/lib/registry下;相当于备份数据,实现数据持久化;实时生效;没有目录自行创建;可以挂载多个
[:rw]读写 [:ro]只读
--privileged=true #怕文件不安全被禁止,放开权限
docker inspect 容器ID #查看容器信息 mounts 下就是容器挂载消息
--volumes-from 容器名 #继承;
docker volume creat //创建数据卷
docker volume inspect 数据卷名 //查看数据卷信息
docker volume ls //查看所有信
docker volume rm //删除指定数据卷
docker volume prune //删除所有没有使用的数据卷
===================================================
9.镜像推送到远程仓库
登录阿里云在容器镜像服务创建仓库选择仓库管理复制命令
docker login --username= 姓名 registry.cn-hangzhou.aliyuncs.com
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/URL/远程仓库名:[镜像版本号]
docker push registry.cn-hangzhou.aliyuncs.com/URL/远程仓库名:[镜像版本号]
10.镜像拉取从远程仓库到本地
docker pull registry.cn-hangzhou.aliyuncs.com/URL/远程仓库名:[镜像版本号]
=====================================================
11.本地仓库
docker pull registry #拉取本地仓库镜像
docker run -d -p 5000:5000 -v 卷名:本地位置 --privileged=true registry #运行
curl -XGET http://ip:5000/v2/_cartalog #查看本地仓库镜像
docker tar 镜像名[:TAG] ip:5000/镜像名[:TAG]
vim etc/docker/daemon.json
"registry-mirrors": ["阿里云镜像地址"], #不要忘记逗号
"insecure-registries":[ip:5000] #插入这一行,允许http访问,重新启动docker
docker push ip:5000/镜像名[:TAG] #推送到本地仓库镜像
curl -XGET http://ip:5000/v2/_cartalog #查看本地仓库镜像
docker pull ip:5000/镜像名[:TAG] #拉取到本地
============================
12.常用软件安装
tomcat
docker pull tomcat:TAG
docker images
docker run -it -p 8080:8080 tomcat #最新版本需要删除webapps文件夹;把webapps.dist修改为webapps
docker exec -it 容器ID
mv webapps.dist webapps
2 docker run -d -p 8080:8080 --name mytomcat8 billygoo/tomcat8-jdk8
=========================================
mysql
docker pull mysql:5.7
=====================
docker run --name mysql -p 3306:3306 --privileged=true\
-v /主机目录/mysql/log:/var/log/mysql \
-v /主机目录/mysql/data:/var/lib/mysql \
-v /主机目录/mysql/conf:/etc/mysql/conf.d\
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
#运行前看看自己的mysql是否启动
=====================
docker run --name mysql -p 3306:3306 --privileged=true \
-v /app/mysql/log:/var/log/mysql \
-v /app/mysql/data:/var/lib/mysql \
-v /app/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
#运行前看看自己的mysql是否启动
=====================
新建my.cnf 修改中文不能存储问题
cd /主机目录/mysql/conf
vim my.cnf
[client]
default_character_set=utf-8
[mysqld]
collation_server =utf-8_general_ci
character_set_server=utf-8
=======================
docker restart 容器名
docker exec -it 容器ID
mysql -uroot - p
show variables like 'character%';
=============================
redis
找到一个redis.conf 文件
mkdir -p /app/redis #将文件放到目录下
修改redis.conf文件
1. requirepass 1234 #开启redis 验证 可选
2.#bind 127.0.0.1 #允许远程连接
3. daemonize no #会与-d 命令冲突
4.appendonly yes #开启数据持久化
5.protected-mode no #允许外部访问
docker pull redis:6.0.8
docker run -p 6379:6379 --name redis --privileged=true\
-v /app/redis/redis.conf:/etc/redis/redis.conf\
-v /app/redis/data:/data\
-d\
redis:6.0.8\
redis-server /etc/redis/redis.conf
==============================
docker run -p 6379:6379 --name redis --privileged=true -v /usr/local/docker/app/redis/redis.conf:/etc/redis/redis.conf -v /usr/local/docker/app/redis/data:/data -d redis:6.0.8 -redis-server /etc/redis/redis.conf
===========================
docker exec -it 容器名 /bin/bash
redis-cil
=====================
13.dockerfile 构建工具;文本文件;在文本文件中写指令
FROM 如果不以任何镜像为基础,那么写法为:FROM scratch。
MAINTAINER 指定作者
LABEL 功能是为镜像指定标签
ADD 一个复制命令,把文件复制到镜像中。
COPY 看这个名字就知道,又是一个复制命令
EXPOSE 功能为暴漏容器运行时的监听端口给外部
ENV 功能为设置环境变量
RUN 功能为运行指定的命令
CMD 功能为容器启动时默认命令或参数
ENTRYPOINT :容器启动时运行得启动命令
VOLUME 可实现挂载功能,可以将宿主机目录挂载到容器中
USER 设置启动容器的用户,可以是用户名或UID,所以,只有下面的两种写法是正确的
WORKDIR 设置工作目录,对RUN,CMD,ENTRYPOINT,COPY,ADD生效。如果不存在则会创建,也可以设置多次。
ARG 设置变量命令,ARG命令定义了一个变量,在docker build创建镜像的时候,使用 --build-arg =来指定参数
ONBUILD 此时有一个镜像B是基于A镜像构建的,那么这个ls -al 命令会在B镜像构建的时候被执行。
STOPSIGNAL STOPSIGNAL命令是的作用是当容器停止时给系统发送什么样的指令,默认是15
HEALTHCHECK 容器健康状况检查命令
更新详细语法说明,请参考官网文档: https://docs.docker.com/engine/reference/builder
=====================================================
新建一个空文件夹docker-demo
拷贝docker-demo.jar文件到docker-demo这个目录
拷贝jdk8.tar.gz文件到docker-demo这个目录
拷贝Dockerfile到docker-demo这个目录
dockerfile
# 指定基础镜像
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
步骤5:进入docker-demo
将准备好的docker-demo上传到虚拟机任意目录,然后进入docker-demo目录下
docker build -t javaweb:1.0
最后访问 http://IP:8090/hello/count
=====================
14.dockercompose 通过指令定义集群中的每个容器如何运行
Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。格式如下:
version: "3.8"
services:
mysql:
image: mysql:5.7.25
environment:
MYSQL_ROOT_PASSWORD: 123
volumes:
- "/tmp/mysql/data:/var/lib/mysql"
- "/tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf"
web:
build: .
ports:
- "8090:8090"