Docker相关笔记
Docker 安装
script1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| #使用 root 权限登录 Centos。确保 yum 包更新到最新。 sudo yum update
#卸载旧版本(如果安装过旧版本的话) sudo yum remove docker docker-common docker-selinux docker-engine
#安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的 sudo yum install -y yum-utils device-mapper-persistent-data lvm2
#设置Docker yum源 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
#可以查看所有仓库中所有docker版本,并选择特定版本安装 yum list docker-ce --showduplicates | sort -r
#安装docker sudo yum install docker-ce || sudo yum install docker-ce-17.12.0.ce
#启动并加入开机启动 sudo systemctl start docker sudo systemctl enable docker
|
DockerHub 加速
script1 2 3 4 5 6 7 8 9 10 11 12 13
| sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": [ "https://1nj0zren.mirror.aliyuncs.com", "https://docker.mirrors.ustc.edu.cn", "http://f1361db2.m.daocloud.io", "https://registry.docker-cn.com" ] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
|
Docker 基本命令
script1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| # 前台运行 docker run -it image:version # 后台运行 docker run -d image:version # 进入容器内部 docker exec -it container /bin/bash
# 创建网络 docker network create network # 使用创建的网络启动容器 docker run --network congnet image
# 杀死所有正在运行的容器 docker kill $(docker ps -a -q) # 删除所有已经停止的容器 docker rm $(docker ps -a -q) # 删除所有未打 dangling 标签的镜 docker rmi $(docker images -q -f dangling=true) # 删除所有镜像 docker rmi $(docker images -q) # 强制删除所有镜像 docker rmi -f $(docker images -q)
|
DockerFile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| FROM openjdk:11.0-jre
# 传入参数 ARG ACTIVE_PROFILE ARG PROJECT_FIEL ARG SHELL_FILE
# 作者信息 MAINTAINER The SpringBoot Project <931305033@qq.com>
# 添加业务服务jar包 ADD $PROJECT_FIEL /root/docker_test/app.jar ADD $SHELL_FILE /root/docker_test/start.sh
# 开发对外端口 EXPOSE 8080 EXPOSE 7080
RUN chmod 777 /root/docker_test/start.sh RUN /root/docker_test/start.sh "ADD_PARAMETER" "ACTIVE_PROFILE" $ACTIVE_PROFILE RUN /bin/bash -c "source /root/.profile" # ##docker 服务启动参数 ENTRYPOINT ["/root/docker_test/start.sh"] CMD ["START", "ACTIVE_PROFILE"]
|
启动脚本
script1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| #!/bin/bash
# 日志文件路径 /root/catalina.out # 配置文件路径 /root/config.properties # Key: # ACTIVE_PROFILE - 项目环境
TYPE=$1 PARAMETER_KEY=$2 PARAMETER_VALUE=$3
REMOTE_CONFIG="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=7080" JAR_PATH="/root/docker_test/app.jar" CATALINA_LOG=" > /root/catalina.out 2>&1 &" SPRING_ACTIVE_PROFILE="--spring.profiles.active="
if [ "$TYPE" = 'ADD_PARAMETER' ]; then # /root/.profile 取决于docker中profile所在的位置 通常在~/.bash_profile,确定后写成绝对地址 echo "$PARAMETER_KEY"="$PARAMETER_VALUE" >> /root/config.properties elif [ "$TYPE" = 'START' ]; then . /root/config.properties nohup java "$REMOTE_CONFIG" -jar "$JAR_PATH" "$SPRING_ACTIVE_PROFILE""$ACTIVE_PROFILE" "$CATALINA_LOG" tail -f /dev/null fi
|
Docker compose
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| version: "3"
services: app: build: build-script networks: - network depends_on: - db ports: - 2368:2368 db: image: mysql:5.7.20 networks: - network environment: MYSQL_ROOT_PASSWORD: mysqlroot MYSQL_USER: ghost MYSQL_PASSWORD: ghost volumes: - ./data:/var/lib/mysql ports: - 3306:3306
|
script1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| #查看帮助 docker-compose -h
# -f 指定使用的 Compose 模板文件,默认为 docker-compose.yml,可以多次指定。 docker-compose -f docker-compose.yml up -d
#启动所有容器,-d 将会在后台启动并运行所有的容器 docker-compose up -d
#停用移除所有容器以及网络相关 docker-compose down
#查看服务容器的输出 docker-compose logs
#列出项目中目前的所有容器 docker-compose ps
#构建(重新构建)项目中的服务容器。服务容器一旦构建后,将会带上一个标记名,例如对于 web 项目中的一个 db 容器,可能是 web_db。可以随时在项目目录下运行 docker-compose build 来重新构建服务 docker-compose build
#拉取服务依赖的镜像 docker-compose pull
#重启项目中的服务 docker-compose restart
#删除所有(停止状态的)服务容器。推荐先执行 docker-compose stop 命令来停止容器。 docker-compose rm
#在指定服务上执行一个命令。 docker-compose run ubuntu ping docker.com
#设置指定服务运行的容器个数。通过 service=num 的参数来设置数量 docker-compose scale web=3 db=2
#启动已经存在的服务容器。 docker-compose start
#停止已经处于运行状态的容器,但不删除它。通过 docker-compose start 可以再次启动这些容器。 docker-compose stop
|
Docker 常见问题
Docker 容器启动时,默认会把容器内部第一个进程,也就是pid=1的程序,作为docker容器是否正在运行的依据,如果 docker 容器pid=1的进程挂了,那么docker容器便会直接退出。
Docker未执行自定义的CMD之前,nginx的pid是1,执行到CMD之后,nginx就在后台运行,bash或sh脚本的pid变成了1。
所以一旦执行完自定义CMD,nginx容器也就退出了。
网络问题,两容器互相ping不同,需要创建一个网络,两个容器链接到同一网络,即可ping通