【Docker】Docker 容器linux 安装手册

安装手册:

  • CentOS 7(使用 yum 进行安装)

一、Docker快速安装

Step 1: 安装必要的一些系统工具

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

Step 2: 添加软件源信息

sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

Step 3: 修改软件源地址

sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo

Step 4: 更新并安装 Docker-CE

sudo yum makecache fast
sudo yum -y install docker-ce

Step 5: 开启 Docker 服务

sudo service docker start

二、Docker优化

** 1、查看 Docker Root Dir **

docker info

**2、停止docker **

systemctl stop docker

3、创建新的docker工作目录

mkdir -p /data/docker

4、迁移docker工作目录 Docker Root Dir

rsync -avzP /var/lib/docker/ /data/docker/

5、设置Docker工作目录,ExecStart配置项增加 --data-root=/data/docker
找到并编辑dockerd的配置文件,将ExecStart配置项改为:

vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --data-root=/data/docker

6、加载配置重启

systemctl daemon-reload
systemctl start docker

7、配置镜像加速器

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

三、Docker可视化安装

  1. 镜像环境准备
docker pull alpine
docker pull library/rethinkdb
docker pull microbox/etcd
docker pull shipyard/docker-proxy
docker pull swarm
docker pull shipyard/shipyard   (#英文版)
docker pull dockerclub/shipyard  (#中文版)
  1. 创建执行脚本deploy
	#!/bin/bash

	if [ "$1" != "" ] && [ "$1" = "-h" ]; then
		echo "Shipyard Deploy uses the following environment variables:"
		echo "  ACTION: this is the action to use (deploy, upgrade, node, remove)"
		echo "  DISCOVERY: discovery system used by Swarm (only if using 'node' action)"
		echo "  IMAGE: this overrides the default Shipyard image"
		echo "  PREFIX: prefix for container names"
		echo "  SHIPYARD_ARGS: these are passed to the Shipyard controller container as controller args"
		echo "  TLS_CERT_PATH: path to certs to enable TLS for Shipyard"
		echo "  PORT: specify the listen port for the controller (default: 8080)"
		echo "  IP: specify the address at which the controller or node will be available (default: eth0 ip)"
		echo "  PROXY_PORT: port to run docker proxy (default: 2375)"
		exit 1
	fi

	if [ -z "`which docker`" ]; then
		echo "You must have the Docker CLI installed on your \$PATH"
		echo "  See http://docs.docker.com for details"
		exit 1
	fi

	ACTION=${ACTION:-deploy}
	IMAGE=${IMAGE:-dockerclub/shipyard:latest}
	PREFIX=${PREFIX:-shipyard}
	SHIPYARD_ARGS=${SHIPYARD_ARGS:-""}
	TLS_CERT_PATH=${TLS_CERT_PATH:-}
	CERT_PATH="/etc/shipyard"
	PROXY_PORT=${PROXY_PORT:-2376}
	SWARM_PORT=3375
	SHIPYARD_PROTOCOL=http
	SHIPYARD_PORT=${PORT:-9090}
	SHIPYARD_IP=${IP}
	DISCOVERY_BACKEND=etcd
	DISCOVERY_PORT=4001
	DISCOVERY_PEER_PORT=7001
	ENABLE_TLS=0
	CERT_FINGERPRINT=""
	LOCAL_CA_CERT=""
	LOCAL_SSL_CERT=""
	LOCAL_SSL_KEY=""
	LOCAL_SSL_CLIENT_CERT=""
	LOCAL_SSL_CLIENT_KEY=""
	SSL_CA_CERT=""
	SSL_CERT=""
	SSL_KEY=""
	SSL_CLIENT_CERT=""
	SSL_CLIENT_KEY=""

	show_cert_help() {
		echo "To use TLS in Shipyard, you must have existing certificates."
		echo "The certs must be named ca.pem, server.pem, server-key.pem, cert.pem and key.pem"
		echo "If you need to generate certificates, see https://github.com/ehazlett/certm for examples."
	}

	check_certs() {
		if [ -z "$TLS_CERT_PATH" ]; then
			return
		fi

		if [ ! -e $TLS_CERT_PATH ]; then
			echo "Error: unable to find certificates in $TLS_CERT_PATH"
			show_cert_help
			exit 1
		fi

		if [ "$PROXY_PORT" = "2375" ]; then
			PROXY_PORT=2376
		fi
		SWARM_PORT=3376
		SHIPYARD_PROTOCOL=https
		LOCAL_SSL_CA_CERT="$TLS_CERT_PATH/ca.pem"
		LOCAL_SSL_CERT="$TLS_CERT_PATH/server.pem"
		LOCAL_SSL_KEY="$TLS_CERT_PATH/server-key.pem"
		LOCAL_SSL_CLIENT_CERT="$TLS_CERT_PATH/cert.pem"
		LOCAL_SSL_CLIENT_KEY="$TLS_CERT_PATH/key.pem"
		SSL_CA_CERT="$CERT_PATH/ca.pem"
		SSL_CERT="$CERT_PATH/server.pem"
		SSL_KEY="$CERT_PATH/server-key.pem"
		SSL_CLIENT_CERT="$CERT_PATH/cert.pem"
		SSL_CLIENT_KEY="$CERT_PATH/key.pem"
		CERT_FINGERPRINT=$(openssl x509 -noout -in $LOCAL_SSL_CERT -fingerprint -sha256 | awk -F= '{print $2;}')

		if [ ! -e $LOCAL_SSL_CA_CERT ] || [ ! -e $LOCAL_SSL_CERT ] || [ ! -e $LOCAL_SSL_KEY ] || [ ! -e $LOCAL_SSL_CLIENT_CERT ] || [ ! -e $LOCAL_SSL_CLIENT_KEY ]; then
			echo "Error: unable to find certificates"
			show_cert_help
			exit 1
		fi

		ENABLE_TLS=1
	}

	# container functions
	start_certs() {
		ID=$(docker run \
			-ti \
			-d \
			--restart=always \
			--name $PREFIX-certs \
			-v $CERT_PATH \
			alpine \
			sh)
		if [ $ENABLE_TLS = 1 ]; then
			docker cp $LOCAL_SSL_CA_CERT $PREFIX-certs:$SSL_CA_CERT
			docker cp $LOCAL_SSL_CERT $PREFIX-certs:$SSL_CERT
			docker cp $LOCAL_SSL_KEY $PREFIX-certs:$SSL_KEY
			docker cp $LOCAL_SSL_CLIENT_CERT $PREFIX-certs:$SSL_CLIENT_CERT
			docker cp $LOCAL_SSL_CLIENT_KEY $PREFIX-certs:$SSL_CLIENT_KEY
		fi
	}

	remove_certs() {
		docker rm -fv $PREFIX-certs > /dev/null 2>&1
	}

	get_ip() {
		if [ -z "$SHIPYARD_IP" ]; then
			SHIPYARD_IP=`docker run --rm --net=host alpine ip route get 8.8.8.8 | awk '{ print $7;  }'`
		fi
	}

	start_discovery() {
		get_ip

		ID=$(docker run \
			-ti \
			-d \
			-p 4001:4001 \
			-p 7001:7001 \
			--restart=always \
			--name $PREFIX-discovery \
			microbox/etcd:latest -addr $SHIPYARD_IP:$DISCOVERY_PORT -peer-addr $SHIPYARD_IP:$DISCOVERY_PEER_PORT)
	}

	remove_discovery() {
		docker rm -fv $PREFIX-discovery > /dev/null 2>&1
	}

	start_rethinkdb() {
		ID=$(docker run \
			-ti \
			-d \
			--restart=always \
			--name $PREFIX-rethinkdb \
			rethinkdb)
	}

	remove_rethinkdb() {
		docker rm -fv $PREFIX-rethinkdb > /dev/null 2>&1
	}

	start_proxy() {
		TLS_OPTS=""
		if [ $ENABLE_TLS = 1 ]; then
			TLS_OPTS="-e SSL_CA=$SSL_CA_CERT -e SSL_CERT=$SSL_CERT -e SSL_KEY=$SSL_KEY -e SSL_SKIP_VERIFY=1"
		fi
		# Note: we add SSL_SKIP_VERIFY=1 to skip verification of the client
		# certificate in the proxy image.  this will pass it to swarm that
		# does verify.  this helps with performance and avoids certificate issues
		# when running through the proxy.  ultimately if the cert is invalid
		# swarm will fail to return.
		ID=$(docker run \
			-ti \
			-d \
			-p $PROXY_PORT:$PROXY_PORT \
			--hostname=$HOSTNAME \
			--restart=always \
			--name $PREFIX-proxy \
			-v /var/run/docker.sock:/var/run/docker.sock \
			-e PORT=$PROXY_PORT \
			--volumes-from=$PREFIX-certs $TLS_OPTS\
			shipyard/docker-proxy:latest)
	}

	remove_proxy() {
		docker rm -fv $PREFIX-proxy > /dev/null 2>&1
	}

	start_swarm_manager() {
		get_ip

		TLS_OPTS=""
		if [ $ENABLE_TLS = 1 ]; then
			TLS_OPTS="--tlsverify --tlscacert=$SSL_CA_CERT --tlscert=$SSL_CERT --tlskey=$SSL_KEY"
		fi

		EXTRA_RUN_OPTS=""

		if [ -z "$DISCOVERY" ]; then
			DISCOVERY="$DISCOVERY_BACKEND://discovery:$DISCOVERY_PORT"
			EXTRA_RUN_OPTS="--link $PREFIX-discovery:discovery"
		fi
		ID=$(docker run \
			-ti \
			-d \
			--restart=always \
			--name $PREFIX-swarm-manager \
			--volumes-from=$PREFIX-certs $EXTRA_RUN_OPTS \
			swarm:latest \
			m --replication --addr $SHIPYARD_IP:$SWARM_PORT --host tcp://0.0.0.0:$SWARM_PORT $TLS_OPTS $DISCOVERY)
	}

	remove_swarm_manager() {
		docker rm -fv $PREFIX-swarm-manager > /dev/null 2>&1
	}

	start_swarm_agent() {
		get_ip

		if [ -z "$DISCOVERY" ]; then
			DISCOVERY="$DISCOVERY_BACKEND://discovery:$DISCOVERY_PORT"
			EXTRA_RUN_OPTS="--link $PREFIX-discovery:discovery"
		fi
		ID=$(docker run \
			-ti \
			-d \
			--restart=always \
			--name $PREFIX-swarm-agent $EXTRA_RUN_OPTS \
			swarm:latest \
			j --addr $SHIPYARD_IP:$PROXY_PORT $DISCOVERY)
	}

	remove_swarm_agent() {
		docker rm -fv $PREFIX-swarm-agent > /dev/null 2>&1
	}

	start_controller() {
		#-v $CERT_PATH:/etc/docker:ro \
		TLS_OPTS=""
		if [ $ENABLE_TLS = 1 ]; then
			TLS_OPTS="--tls-ca-cert $SSL_CA_CERT --tls-cert=$SSL_CERT --tls-key=$SSL_KEY --shipyard-tls-ca-cert=$SSL_CA_CERT --shipyard-tls-cert=$SSL_CERT --shipyard-tls-key=$SSL_KEY"
		fi

		ID=$(docker run \
			-ti \
			-d \
			--restart=always \
			--name $PREFIX-controller \
			--link $PREFIX-rethinkdb:rethinkdb \
			--link $PREFIX-swarm-manager:swarm \
			-p $SHIPYARD_PORT:$SHIPYARD_PORT \
			--volumes-from=$PREFIX-certs \
			$IMAGE \
			--debug \
			server \
			--listen :$SHIPYARD_PORT \
			-d tcp://swarm:$SWARM_PORT $TLS_OPTS $SHIPYARD_ARGS)
	}

	wait_for_available() {
		set +e
		IP=$1
		PORT=$2
		echo Waiting for Shipyard on $IP:$PORT

		docker pull ehazlett/curl > /dev/null 2>&1

		TLS_OPTS=""
		if [ $ENABLE_TLS = 1 ]; then
			TLS_OPTS="-k"
		fi

		until $(docker run --rm ehazlett/curl --output /dev/null --connect-timeout 1 --silent --head --fail $TLS_OPTS $SHIPYARD_PROTOCOL://$IP:$PORT/ > /dev/null 2>&1); do
			printf '.'
			sleep 1
		done
		printf '\n'
	}

	remove_controller() {
		docker rm -fv $PREFIX-controller > /dev/null 2>&1
	}

	if [ "$ACTION" = "deploy" ]; then
		set -e

		check_certs

		get_ip

		echo "Deploying Shipyard"
		echo " -> Starting Database"
		start_rethinkdb
		echo " -> Starting Discovery"
		start_discovery
		echo " -> Starting Cert Volume"
		start_certs
		echo " -> Starting Proxy"
		start_proxy
		echo " -> Starting Swarm Manager"
		start_swarm_manager
		echo " -> Starting Swarm Agent"
		start_swarm_agent
		echo " -> Starting Controller"
		start_controller

		wait_for_available $SHIPYARD_IP $SHIPYARD_PORT

		echo "Shipyard available at $SHIPYARD_PROTOCOL://$SHIPYARD_IP:$SHIPYARD_PORT"
		if [ $ENABLE_TLS = 1 ] && [ ! -z "$CERT_FINGERPRINT" ]; then
			echo "SSL SHA-256 Fingerprint: $CERT_FINGERPRINT"
		fi
		echo "Username: admin Password: shipyard"

	elif [ "$ACTION" = "node" ]; then
		set -e

		if [ -z "$DISCOVERY" ]; then
			echo "You must set the DISCOVERY environment variable"
			echo "with the discovery system used with Swarm"
			exit 1
		fi

		check_certs

		echo "Adding Node"
		echo " -> Starting Cert Volume"
		start_certs
		echo " -> Starting Proxy"
		start_proxy
		echo " -> Starting Swarm Manager"
		start_swarm_manager $DISCOVERY
		echo " -> Starting Swarm Agent"
		start_swarm_agent

		echo "Node added to Swarm: $SHIPYARD_IP"

	elif [ "$ACTION" = "upgrade" ]; then
		set -e

		check_certs

		get_ip

		echo "Upgrading Shipyard"
		echo " -> Pulling $IMAGE"
		docker pull $IMAGE

		echo " -> Upgrading Controller"
		remove_controller
		start_controller

		wait_for_available $SHIPYARD_IP $SHIPYARD_PORT

		echo "Shipyard controller updated"

	elif [ "$ACTION" = "remove" ]; then
		# ignore errors
		set +e

		echo "Removing Shipyard"
		echo " -> Removing Database"
		remove_rethinkdb
		echo " -> Removing Discovery"
		remove_discovery
		echo " -> Removing Cert Volume"
		remove_certs
		echo " -> Removing Proxy"
		remove_proxy
		echo " -> Removing Swarm Agent"
		remove_swarm_agent
		echo " -> Removing Swarm Manager"
		remove_swarm_manager
		echo " -> Removing Controller"
		remove_controller

		echo "Done"
	else
		echo "Unknown action $ACTION"
		exit 1
	fi

3、进入可视化平台

Shipyard available at http://192.168.99.111:9090
Username: admin Password: shipyard

四、安装Docker Compose

  • 1、下载Docker Compose
url:https://github.com/docker/compose/releases/download/v2.19.0/docker-compose-linux-x86_64
  • 2、安装添加权限
修改名称
mv docker-compose-linux-x86_64 docker-compose
添加权限
chmod +x docker-compose
放入执行目录
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
测试安装完成
docker-compose --version

(Docker Compose version v2.19.0)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值