Tagged: docker

Install docker in CentOS

Docker要求Centos系统的内核版本高于3.10,因此在安装前你需要知道你的系统是否支持Docker安装的最低内核要求。

uname -r

如果你安装过旧版本的Docker,那么你可以先删除它,再安装新的Docker版本。

# 查看电脑中已安装的Docker程序
yum list installed | grep docker

# 卸载Docker及相关程序
rpm -qa | grep docker | xargs rpm -e

# 手动卸载
yum remove docker  docker-common docker-selinux docker-engine

安装需要的软件包及设置docker安装源

yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

查看仓库中所有的docker版本

yum list docker-ce --showduplicates | sort -r

安装Docker

yum install docker-ce

# 安装特定的版本
yum install <FQPN>

# 验证安装
docker -v

设置开机启动

systemctl start docker
systemctl enable docker

安装Docker-Compose

你可以在 https://github.com/docker/compose/releases 找到你需要的Docker-compose版本。

Document:https://docs.docker.com/compose/install/

# 下载
curl -L https://github.com/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

# 赋予执行权限
chmod +x /usr/local/bin/docker-compose

# 映射执行路径
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

开放2357

在java中开发微服务的应用程序,一般都会使用Docker来部署,但在开发的同时,我们需要将开发的程序打包,这时候就需要直接连接Docker服务,然而Docker是不允许外部直接连接的,这时候我们就需要开启2357端口来暴露Docker服务。

你可以修改Docker的守护,来达到该目的。

vim /lib/systemd/system/docker.service

# 修改ExecStart为如下
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

# 重载
systemctl daemon-reload
systemctl restart docker

# 开启防火墙
firewall-cmd --zone=public --add-port=2357/tcp --permanent
Docker

Harbor 安装部署

官方发布地址:https://github.com/goharbor/harbor/releases
程序版本依赖:docker 17.03.0-ce+ and docker-compose 1.18.0+ .

Harbor支持在线安装及离线安装,此文章采用在线离线安装的形式,且安装版本为1.8.0

一、下载安装程序

# 下载
wget https://storage.googleapis.com/harbor-releases/release-1.8.0/harbor-offline-installer-v1.8.0.tgz

# 解压
tar xvf harbor-offline-installer-v1.8.0.tgz

二、配置

配置参数位于文件harbor.yml中

以下是我的配置,可根据自己的需求设定。

这里的https证书是我在腾讯云申请的免费SSL证书,你如果在腾讯云注册有域名也可以在这里 https://console.cloud.tencent.com/ssl 直接申请,当然你也可以使用免费证书的申请。

如下证书使用的是腾讯云申请的 DV SSL证书(Domain Validation SSL),申请后大概一小时会通过邮件得到信息,将申请到的证书下载下来,使用Nginx包内的Crt及Key文件即可。

hostname: hub.youvigo.com

# https related config
https:
  port: 443
  certificate: /data/cert/server.crt
  private_key: /data/cert/server.key

harbor_admin_password: youpassword

# The default data volume
data_volume: /data/harbor/data

三、安装

./install

docker 快速部署Odoo环境

写在前面

经常需要将开发的项目部署到测试服务器上以便客户可以看到,但之前都是安装环境这样的方式,不适合快速搭建。

安装Docker及docker-compose

yum install -y docker docker-compose

systemctl enable docker # 开机自动启动docker
systemctl start docker # 启动docker
systemctl restart docker # 重启dokcer
systemctl stop docker

# 验证docker是否安装成功
docker run --rm hello-world

设置Docker 加速

阿里云:https://cr.console.aliyun.com/#/accelerator

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://wkumpv63.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

使用docker-compose.yml运行容器

目录结构

配置文件(docker-compose.yml)

version: '3'
services:
  web:
    image: odoo:12.0
    container_name: odoo
    depends_on:
      - db
    ports:
      - "8069:8069"
    networks:
      - "odoonetwork"
    volumes:
      - odoo-web-data:/var/lib/odoo
      - ./config:/etc/odoo
      - ./addons:/mnt/extra-addons
  web_odoo:
    image: odoo:10.0
    container_name: odoo10
    depends_on:
      - db
    ports:
      - "8010:8069"
    networks:
      - "odoonetwork"
    volumes:
      - odoo10-web-data:/var/lib/odoo
      - ./config10:/etc/odoo
      - ./addons10:/mnt/extra-addons
  web_odoo11:
    image: odoo:11.0
    container_name: odoo11
    depends_on:
      - db
    ports:
      - "8011:8069"
    networks:
      - "odoonetwork"
    volumes:
      - odoo11-web-data:/var/lib/odoo
      - ./config11:/etc/odoo
      - ./addons11:/mnt/extra-addons
  db:
    image: postgres:10
    container_name: pgsql
    ports:
      - "5432:5432"
    networks:
      - "odoonetwork"
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_PASSWORD=odoo
      - POSTGRES_USER=odoo
      - PGDATA=/var/lib/postgresql/data/pgdata
    volumes:
      - odoo-db-data:/var/lib/postgresql/data/pgdata
  jenkins:
    restart: always
    image: jenkins/jenkins:lts
    container_name: jenkins
    ports:
      - "8080:8080"
      - "50000:50000"
    networks:
      - "odoonetwork"
    volumes:
      - ./data:/var/jenkins_home
networks:
  odoonetwork:
    driver: bridge
volumes:
  odoo-web-data:
  odoo-db-data:
  odoo10-web-data:
  odoo11-web-data:

odoo配置文件

配置文件可以从这里找到相应的版本:https://github.com/odoo/docker/tree/master/12.0

路径:addons/odoo.conf

[options]
addons_path = /mnt/extra-addons,/usr/lib/python2.7/dist-packages/odoo/addons
;data_dir = /var/lib/odoo
admin_passwd = admin
csv_internal_sep = ,
db_maxconn = 64
db_name = False
db_template = template1
dbfilter = .*
debug_mode = False
email_from = False
limit_memory_hard = 2684354560
limit_memory_soft = 2147483648
limit_request = 8192
limit_time_cpu = 60
limit_time_real = 120
list_db = True
log_db = False
log_handler = [':INFO']
log_level = info
logfile = None
longpolling_port = 8072
max_cron_threads = 2
osv_memory_age_limit = 1.0
osv_memory_count_limit = False
smtp_password = False
smtp_port = 25
smtp_server = localhost
smtp_ssl = False
smtp_user = False
workers = 0
xmlrpc = True
xmlrpc_interface =
xmlrpc_port = 8069
xmlrpcs = True
xmlrpcs_interface =
xmlrpcs_port = 8071

Docker启动命令

docker-compose up -d
docker-compose stop
# 停止某一个容器
docker ps -a # 查看当前所有容器
docker stop <CONTAINER ID or NAMES>
docker start <CONTAINER ID or NAMES>
docker restart <CONTAINER ID or NAMES>

PostgreSQL 管理

docker仓库:https://hub.docker.com/_/postgres/

docker exec -tiu postgres <postgres_container_name> psql
docker exec -ti <postgres_container_name> psql -U <postgres_user>
# 推荐使用如下方式,它不会干扰主容器
docker run -it --link <postgres_container_name>:postgres --rm postgres sh -c 'exec psql -h "$POSTGRES_PORT_5432_TCP_ADDR" -p "$POSTGRES_PORT_5432_TCP_PORT" -U <postgres_user>'
# 备份\删除数据库\恢复

# To backup
docker exec -u <your_postgres_user> <postgres_container_name> pg_dump -Fc <database_name_here> > db.dump

# To drop db
docker exec -u <your_postgres_user> <postgres_container_name> psql -c 'DROP DATABASE <your_db_name>'

# To restore
docker exec -i -u <your_postgres_user> <postgres_container_name> pg_restore -C -d postgres < db.dump

Odoo 容器参数说明

# 进入odoo容器
docker exec -u 0 -it 28854cf96877 bash
# 安装依赖
pip install xmltodict

服务器的默认配置文件位于(/etc/odoo/odoo.conf),若你有一个自定义的配置文件位于(/path/to/config/odoo.conf),那么你的运行命令就该是如下这样。

docker run -v /path/to/config:/etc/odoo -p 8069:8069 --name odoo --link db:db -t odoo

当然,你也可以直接指定内联的Odoo参数,这些参数必须在前面加上 --,如下所示:

docker run -p 8069:8069 --name odoo --link db:db -t odoo --db-filter=odoo_db_.*

当然,运行Odoo,大部分时候是需要运行我们自己开发的模块,在docker中运行的时候,我们可以使用如下方式将其加载。

docker run -v /path/to/addons:/mnt/extra-addons -p 8069:8069 --name odoo --link db:db -t odoo

升级docker版本

docker run --volumes-from old-odoo -p 8070:8069 --name new-odoo --link db:db -t odoo

防火墙设置(不需要设置)

firewall-cmd --zone=public --add-port=8069/tcp --permanent
firewall-cmd --reload

Docker 维护命令

# 查看容器信息
docker info

# 查看镜像列表
docker images

# 启动、停止
docker stop <id/container_name>
docker start <id/container_name>
docker kill <id/container_name>

# 查看正在运行的容器
docker ps -a

# 查看容器日志
docker logs <id/container_name>

# 实时查看日志输出
docker logs -f <id/container_name> (类似 tail -f) (带上时间戳-t)

# 启动容器以后台方式运行(更通用的方式)
docker run -d -it image_name

# 显示一个运行的容器里面的进程信息
docker top Name/ID  

# 移除镜像
docker stop <id/container_name>
docker rm  <id/container_name> 

# 完全删除镜像
docker rmi <id> 

# 制作镜像(根据容器id来创建新的镜像
docker commit 93639a83a38e  wsl/javaweb:0.1

Install GitLab with Docker

环境:CentOS release 6.9 (Final)

安装Docker

yum search docker
yum -y install docker-io
service docker start

# 查看版本
docker version

下载Gitlab

docker pull gitlab/gitlab-ce:latest

启动Gitlab

docker run --detach \
    --hostname gitlab.bcsytv.com \
    --publish 443:443 --publish 80:80 --publish 2222:22 \
    --name 'gitlab' \
    --restart always \
    --volume /srv/gitlab/config:/etc/gitlab \
    --volume /srv/gitlab/logs:/var/log/gitlab \
    --volume /srv/gitlab/data:/var/opt/gitlab \
    gitlab/gitlab-ce:latest

常用命令

# 列出所有容器 
docker ps -a

# 列出最近一次启动的container
docker ps -l 

# 显示一个运行的容器里面的进程信息
docker top Name/ID  

# 查看容器内部详情细节
docker inspect <id/container_name>

# 启动容器并启动bash(交互方式)
docker run -i -t <image_name/continar_id> /bin/bash

# 启动容器以后台方式运行(更通用的方式)
docker run -d -it  image_name

# 附着到正在运行的容器
docker attach <id、container_name>

# 进入正在运行的容器内部,同时运行bash(比attach更好用)
docker exec -t -i <id/container_name>  /bin/bash

# 查看容器日志
docker logs <id/container_name>

# 实时查看日志输出
docker logs -f <id/container_name> (类似 tail -f) (带上时间戳-t)

# 在容器中安装新的程序
docker run image_name apt-get install -y app_name  

# 从容器里面拷贝文件/目录到本地一个路径
docker cp Name:/container_path to_path  
docker cp ID:/container_path to_path

# 保存对容器的修改(commit) 当你对某一个容器做了修改之后(通过在容器中运行某一个命令),可以把对容器的修改保存下来,这样下次可以从保存后的最新状态运行该容器。
docker commit ID new_image_name  

# 删除单个容器
docker rm Name/ID 

# 删除所有容器
docker rm `docker ps -a -q`  

# 停止、启动、杀死、重启一个容器
docker stop Name/ID  
docker start Name/ID  
docker kill Name/ID  
docker restart name/ID

# 列出镜像
docker images

# 从dockerhub检索image
docker search image_name

# 下载image
docker pull image_name

# 删除一个或者多个镜像;
docker rmi image_name  

# 显示一个镜像的历史;
docker history image_name

# 发布docker镜像
docker push new_image_name

# ps:要发布到私有Registry中的镜像,在镜像命名中需要带上Registry的域名(如果非80端口,同时需要带上端口号)比如:
docker push dockerhub.yourdomain.com:443/hello.demo.kdemo:v1.0

# 查看docker0的网络(宿主机上操作)
ip a show docker0

# 查看容器的IP地址
docker inspect -f '{{ .NetworkSettings.IPAddress }}' <id、container_name>

# 附着到容器内部查看其内部ip:
ip a show eth0

Archives