Docker记录

install

CentOS7

1
2
3
4
5
6
sudo yum remove docker docker-common docker-selinux docker-engine
sudo yum install -y yum-utils device-mapper-persistent-data lvm2 wget
wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
sudo sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
sudo yum makecache fast
sudo yum install docker-ce -y

更换镜像加速

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://cdoi3iys.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

自定义 docker0 地址防止内网冲突

1
2
3
4
5
6
7
8
9
10
{
"bip": "182.18.160.1/24",
"registry-mirrors": ["https://cdoi3iys.mirror.aliyuncs.com"],
"default-address-pools": [
{
"base": "12.11.0.0/16",
"size": 24
}
]
}

Centos8

1
2
3
4
5
6
dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
dnf list docker-ce
dnf install docker-ce --nobest -y
systemctl start docker
systemctl enable docker
docker --version

docker-compose install

1
2
3
4
5
6
7
dnf install curl -y
curl -L "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

$ docker-compose --version
docker-compose version 1.25.0, build 1110ad01

升级 containerd.io

1
2
3
4
5
https://download.docker.com/linux/centos/7/x86_64/stable/Packages/
curl -O https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm
#升级
rpm -U containerd.io-1.2.6-3.3.el7.x86_64.rpm
dnf update -y

image

basic

  • docker pull image #拉取镜像到本地

  • docker images #查看本地所有 镜像

  • docker run image #创建一个容器并运行镜像

    每次使用 run 命令都会创建一个新的容器

  • docker rmi image/imageId #删除镜像

  • docker ps [-a] #查看运行的容器(-a 查看所有)

  • docker run -d -p 6379:5000 image #创建一个容器 并将主机 6379 端口 映射到容器 5000 端口

advance

  • 拉取最新镜像

    docker images |grep -v REPOSITORY|awk '{print $1}'|xargs -L1 docker pull

  • 删除goharbor镜像

    docker images |grep -v REPOSITORY | grep 'goharbor'|awk '{print $1":"$2}' |xargs -L1 docker rmi

  • 删除 none 镜像

    docker rmi $(docker images | grep "none" | awk '{print $3}')

    docker images prune

  • 删除goharbor容器

    docker ps -a | grep -v IMAGE |grep 'goharbor' |awk '{print $1}' |xargs -L1 docker rm

  • 打包镜像

    • 标准写法

      docker save -o oa-latest.tar oa:latest

    • 压缩写法

      docker save oa:latest | gzip > oa-latest.tar.gz

Container

  • 停止容器

    docker stop $(docker ps -a -q)

  • 删除容器

    docker rm $(docker ps -a -q)

  • 删除镜像

    docker image rm $(docker image ls -a -q)

  • 删除数据卷:

    docker volume rm $(docker volume ls -q)

  • 删除 network:

    docker network rm $(docker network ls -q)

  • 直接并全面清理的

    docker stop $(docker ps -a -q) && docker system prune --all --force

Docker 容器开机自动启动

  • docker run 启动容器 使用–restart 参数来设置

    docker run -m 512m --memory-swap 1G -it -p 6379:6379 --restart=always --name redis -d redis

  • –restart 具体参数值详细信息

    • no - 容器退出时,不重启容器

    • on-failure - 只有在非 0 状态退出时才从新启动容器

    • always -不关心退出状态 一直重启容器
      使用 on-failure 策略时,指定 Docker 将尝试重新启动容器的最大次数。

    • sudo docker run –restart=on-failure:10 redis
      如果创建时未指定 –restart=always , 可通过 update 命令

      1
      2
      3
      4
      docker update --restart=always xxx
      docker update --restart=no xxx
      docker update --restart=on-failure xxx
      docker update --restart=unless-stopped xxx

      参考官方文档

Dockerfile

创建

  • 文件格式

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    # This dockerfile uses the ubuntu image
    # VERSION 2 - EDITION 1
    # Author: docker_user
    # Command format: Instruction [arguments / command] ..

    # 1、第一行必须指定 基础镜像信息
    FROM ubuntu

    # 2、维护者信息
    MAINTAINER docker_user docker_user@email.com

    # 3、镜像操作指令
    RUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe" >> /etc/apt/ sources.list
    RUN apt-get update && apt-get install -y nginx
    RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf

    # 4、容器启动执行指令
    CMD /usr/sbin/nginx

    Dockerfile 分为四部分:基础镜像信息、维护者信息、镜像操作指令、容器启动执行指令。一开始必须要指明所基于的镜像名称,接下来一般会说明维护者信息;后面则是镜像操作指令,例如 RUN 指令。每执行一条 RUN 指令,镜像添加新的一层,并提交;最后是 CMD 指令,来指明运行容器时的操作命令。

测试

  • 使用 DockerFile 构建

    1
    docker build -t runoob/centos:6.7 .

    参数说明
    -t :指定要创建的目标镜像名
    . :Dockerfile 文件所在目录,可以指定 Dockerfile 的绝对路径

网络

默认 IP 修改

修改文件 /etc/docker/daemon.json 追加内容 “bip”: “ip/netmask” [ 切勿与宿主机同网段 ]

1
2
3
4
5
vim /etc/docker/daemon.json

{
"bip":"192.168.100.1/24"
}

常用软件安装

网卡定义

1
2
docker network create nginx-net
docker network inspect nginx-net

后续容器创建 加上–network nginx-net 即可

mysql

1
2
3
4
5
6
7
8
9
docker run --name mysql5.7 \
-v /root/docker/mysql/mysql:/var/lib/mysql \
-v /root/docker/mysql/conf.d:/etc/mysql/conf.d \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=admin \
--restart=always -d mysql:5.7 \
--lower_case_table_names=1 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci
1
2
3
4
5
# 创建volume
docker volume create hrms_mysql
# 运行镜像并挂载镜像
docker run -d --name mysql -p 3306:3306 \
-v hrms_mysql:/var/lib/mysql pfs.wiseloong.com/wise/mysql:5

sql_mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

nexus

1
docker run -d -p 8081:8081 --name nexus --restart=always -v nexus-data:/nexus-data sonatype/nexus3

Redis

1
docker run --name redis -p 6379:6379 -v $PWD/data:/data -v $PWD/conf/redis.conf:/etc/redis/redis.conf --privileged=true --restart=always -d redis

oracle

  • 创建卷

    docker volume create oracle-data

  • 拉取并运行镜像

    docker run -d --name oracle --restart=always -p 1521:1521 -v oracle-date:/u01/app/oracle/oradata --shm-size=1g pfs.wiseloong.com/wise/oracle:11-xe

    默认密码 system/wiseloong

  • 进入 SQLplus

    docker exec -it oracle sqlplus system/wiseloong@//localhost:1521/XE

  • 修改密码不过期(进入 sqlplus 执行)

    alter profile DEFAULT limit password_life_time unlimited;

  • 空表导出(进入 sqlplus 执行)

    alter system set deferred_segment_creation=false;

  • 删除卷

    docker volume rm oracle-data
    docker volume prune

Tomcat + 连接容器 (数据库)

1
2
3
docker run -d -p 8088:8080 --name activiti \
-v /root/docker/tomcat/:/usr/local/tomcat/webapps \
--link mysql5.7:mysql --restart=always tomcat

ES(elasticsearch)

docker run -d -p 9200:9200 -p 9300:9300 --name es -e "discovery.type=single-node" elasticsearch:latest

GitLab

1
2
3
4
5
6
docker run -d -h gitlab  \
-p 8100:80 -p 8200:443 -p 8300:22 \
-v /docker/gitlab/config:/etc/gitlab \
-v /docker/gitlab/logs:/var/log/gitlab \
-v /docker/gitlab/data:/var/opt/gitlab \
--name gitlab gitlab/gitlab-ce:latest

汉化参考

Jfrog

docker pull docker.bintray.io/jfrog/artifactory-oss:latest

创建卷组与容器

1
2
3
4
5
docker volume create --name artifactory_oss_data

docker run --name artifactory -d \
-v artifactory_oss_data:/var/opt/jfrog/artifactory \
-p 8082:8082 docker.bintray.io/jfrog/artifactory-oss:latest

Jenkins

1
2
3
docker run -u root -p 8080:8080 \
-v jenkins-data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock jenkinsci/blueocean

Nginx

1
2
3
docker run -d -p 80:80 --name nginx \
-v /root/docker/nginx/html:/usr/share/nginx/html \
-v /root/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro nginx

IDEA 连接 Docker

docker 配置

1
2
3
vim /usr/lib/systemd/system/docker.service

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H fd:// --containerd=/run/containerd/containerd.sock

开放防火墙端口

firewalld-cmd --zone=public ==add-port=2375/tcp --permanent

docker 会自己打开防火墙

IDEA 中填写

tcp://172.17.150.61:2375

作者

Heng.Wang

发布于

2019-09-08

更新于

2023-09-20

许可协议

CC BY-NC-SA 4.0

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×