安装docker
- 安装
yum update -y
yum install docker -y
- 修改国内镜像源
vim /etc/docker/daemon.json
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
-
启动:
service start docker -
停止:
service docker stop -
重启:
service docker restart -
设置docker开机自动启动:
systemctl enable docker.service -
常用命令
-
测试能否正常运行:
docker run hello-world -
查看所有镜像:
docker iamges -
运行镜像:
docker run -d -p x:xx --name xxx... -
删除镜像:
docker rmi xxx -
查看所有容器:
docker ps -a -
查看正在运行的容器:
docker ps -
运行容器:
docker start xxx -
停止容器:
docker stop xxx -
删除容器:
docker rm xxx -
进入容器内部:
docker exec -it xxx /bin/bash -
退出容器内部:
CTRL+P+Q -
查看容器日志:
docker logs xxx
安装mysql(5.7)
- 运行示例:
docker run -p 3306:3306 --name mysql -v /home/docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=Yangrj1993 -d docker.io/mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
- 解释(https://hub.docker.com/_/mysql):
-p 3306:3306 把容器的3306映射到宿主机的3306
--name mysql 容器名称
-v /home/tools/mysql/my.cnf:/etc/mysql/my.cnf 挂载配置文件,/home/tools/mysql/my.cnf -d docker.io/mysql 在后台运行 指定镜像
-v /home/tools/mysql/data:/var/lib/mysql 挂载mysql数据文件
-e MYSQL_ROOT_PASSWORD=Yangrj1993 设置root密码
--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci 配置默认编码
- 设置mysql连接睡眠时间为1000秒(任何sleep连接睡眠时间若超过100秒,将会被mysql服务自然终止):
set global wait_timeout=1000 - 解决莫名其妙报错:
[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column’information_schema.PROFILING.SEQ’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
查看:select @@global.sql_mode;
修改sql_mode,去掉【ONLY_FULL_GROUP_BY】:set global sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
安装redis
- 下载redis.config:
wget http://download.redis.io/redis-stable/redis.conf - 修改redis.config:
logfile "redis.log"
port 6379
dir /data
appendonly yes
appendfilename appendonly.aof
requirepass 1234
- 拉取最新redis镜像:
docker pull redis:latest - 运行:
docker run -p 6379:6379 --name redis -v /home/docker/redis/redis.conf:/usr/local/etc/redis/redis.conf -v /home/docker/redis/redis_data/:/data -d docker.io/redis redis-server /usr/local/etc/redis/redis.conf
- 解释:
-p 6379:6379 将容器的6379端口映射到主机的6379端口
-v /home/docker/redis/redis_data/:/data 将主机中目/home/docker/redis/redis_data挂载到容器的/data
--name redis 给出容器名称
-d 在后台运行 指定镜像
docker.io/redis 镜像名称
redis-server /usr/local/etc/redis/redis.conf: redis的启动命令,指定配置文件
Dockerfile
- FROM
FROM <image>
必须是第一个指令,基础源镜像
- MAINTAINER
MAINTAINER <name> <email>
描述镜像的创建者,名称和邮箱
- RUN
RUN "command" "param1" "param2"
执行完成之后会成为一个新的镜像(分层构建,一句RUN就是一层,也相当于一个版本)
可以通过&符号连接多个RUN语句
- CMD
CMD command param1 param2
在D整个ockerfile中只能出现一次,有多个,只有最后一个会有效
- EXPOSE
EXPOSE <port> [<port>...]
告诉Docker服务器容器对外映射的容器端口号,在docker run -p的时候生效
- ENV
EVN <key> <value> 只能设置一个
EVN <key>=<value>允许一次设置多个
设置容器的环境变量,可以让其后面的RUN命令使用,容器运行的时候这个变量也会保留
- ADD
ADD <src> <dest>
复制本机文件或目录或远程文件,添加到指定的容器目录,支持GO的正则模糊匹配。路径是绝对路径,不存在会自动创建。如果源是一个目录,只会复制目录下的内容,目录本身不会复制。
ADD命令会将复制的压缩文件夹【自动解压】,这也是与COPY命令最大的不同。
- COPY
COPY <src> <dest>
COPY除了不能自动解压,也不能复制网络文件。其它功能和ADD相同
- ENTRYPOINT
ENTRYPOINT "command" "param1" "param2"
和CMD命令一样,唯一的区别是不能被docker run命令的执行命令覆盖,如果要覆盖需要带上选项--entrypoint,如果有多个选项,只有最后一个会生效
- VOLUME
VOLUME ["path"]
在主机上创建一个挂载,挂载到容器的指定路径
- USER
USER daemon
指定运行容器时的用户名或UID,后续的RUN、CMD、ENTRYPOINT也会使用指定的用户运行命令
- WORKDIR
WORKDIR path
为RUN、CMD、ENTRYPOINT指令配置工作目录。可以使用多个WORKDIR指令,后续参数如果是相对路径,则会基于之前的命令指定的路径。如:WORKDIR /home WORKDIR test 。最终的路径就是/home/test
- ONBUILD
ONBUILD [INSTRUCTION]
配置当前所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令。意思就是,这个镜像创建后,如果其它镜像以这个镜像为基础,会先执行这个镜像的ONBUILD命令
- Dockerfile示例
FROM java:8
VOLUME /home/docker/tmp
ADD weekly-1.0.0.jar /app.jar
EXPOSE 8888
ENTRYPOINT ["java","-jar","app.jar"]
# 构建:docker build -t week-1 .
# 启动:docker run -p 8888:8888 --name week -d d23bdf5b1b1b

7327

被折叠的 条评论
为什么被折叠?



