官方地址html
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
複製代碼
# Install required packages
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
# Use the following command to set up the stable repository
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
複製代碼
sudo yum install docker-ce docker-ce-cli containerd.io
複製代碼
sudo systemctl start docker
複製代碼
sudo docker run hello-world
複製代碼
todopython
# Adding user vagrant to group docker
sudo gpasswd -a vagrant docker
sudo service docker restart
複製代碼
exit
vagrant ssh
複製代碼
sudo vim /etc/docker/daemon.jsonmysql
{
"registry-mirrors" : ["https://docker.mirrors.ustc.edu.cn"]
}
複製代碼
sudo service docker restartlinux
本身構建Base Imagenginx
#include<stdio.h>
int main()
{
printf("hello docker\n");
}
複製代碼
gcc -static hello.c -o hello
複製代碼
# 製作Base Image
FROM scratch
ADD hello /
CMD ["/hello"]
複製代碼
docker build -t zzh/test .
複製代碼
docker run zzh/test
複製代碼
在已有Base Image基礎上構建Imagegit
# 拉一個centos的Image
docker pull centos
# 相互模式運行centos
docker run -it centos
# 下載vim
yum install vim -y
# 退出container
exit;
# 查詢container
docker container ls -a
# 構建Image
docker build docker commit -a "zzh" -m "centos with vim" ac327be41bb1 zzh/centos
# 清理全部container
docker rm $(docker container ls -aq)
# 清理Image
docker rmi 21fb0d14f197
複製代碼
# Dockerfile文件
# 使用Base Image
From centos
yum install vim -y
複製代碼
# 構建命令
docker build -t zzh/centos-vim .
# 退出container
exit;
# 清理全部container
docker rm $(docker container ls -aq)
# 清理Image
docker rmi ae813e1893f3
複製代碼
todogithub
# 製做Base Image
FROM scratch
# 使用Base Image
FROM centos
複製代碼
LABEL maintainer="xxx@qq.com"
LABEL version="1.0"
LABEL description="test"
複製代碼
# &&聯接兩個命令,\換行,一個RUN一層,建議用&&寫一塊兒,避免無用分層
RUN yum update && yum install -y vim \
python-dev
複製代碼
# 不存在就建立
WORKDIR /test
WORKDIR demo
# 結果/test/demo,不要使用RUN cd,儘可能使用絕對路徑
RUN pwd
複製代碼
# 相同:把文件拷貝到指定目錄
# 不一樣:ADD若是拷貝壓縮文件會自動解壓,優先使用COPY
ADD hello /
COPY hello /
# /root/test/hello
WORKDIR /root
ADD hello test/
複製代碼
# 定義常量,以後用"${MYSQL_VERSION}"獲取5.6
ENV MYSQL_VERSION 5.6
複製代碼
RUN:執行命令且建立新的Image Layer
CMD:設置容器啓動後默認執行的命令和參數,若是docker run指定了其餘命令,CMD命令被忽略如docker run -it centos /bin/bash,定義了多個CMD只會執行最後一個
ENTRYPOINT:設置容器啓動時運行的命令,讓容器以應用程序的行程運行,必定會執行
複製代碼
Docker Hubsql
# 輸入帳號密碼登錄
docker login
docker push xxx/test:latest
複製代碼
私有Registry官方地址docker
# 另一臺服務器上安裝docker後執行
docker run -d -p 5000:5000 --restart always --name registry registry:2
# 構建image
docker build -t ip:5000/hello-world .
# 安全
cd /etc/docker/
# 內容{"insecure-registries":["ip:5000"]}
vim daemon.json
sudo vim /lib/systemd/system/docker.service
# 重啓docker
sudo service docker restart
複製代碼
docker.service加一行 json
打開地址http://ip:5000/v2/_catalog,查看是否已經push到registry# 啓動兩個容器
docker run -d --name test1 busybox /bin/sh -c "while true;do sleep 3600;done"
docker run -d --name test2 busybox /bin/sh -c "while true;do sleep 3600;done"
# 查詢docker網絡
docker network ls
# 新建bridge
docker network create -d bridge my-bridge
# docker run指定bridge,鏈接my-bridge的容器自動link好了,一個容器能夠同時鏈接多個bridge,可是不互通除非同時在。
--network my-bridge
# docker run指定link,能夠經過test2:80這樣的方式訪問,相似dns解析
--link test2
# 鏈接bridge
docker network connect my-bridge test2
# 端口映射
-p 80:80
複製代碼
虛擬機網絡狀況
brctl show docker inspect bridge 整體docker overlay & etcd
能夠在執行Docker create/Docker run時,經過-v參數將主機的目錄做爲容器的數據卷。這部分功能是基於本地文件系統的volume管理
支持第三方存儲方案,例如aws等雲廠商
# mysql
docker run -d -v mysql:/var/lib/mysql --name mysql1 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql
# 查看日誌
docker logs mysql1
# 查看volume
docker volume ls
# 進入mysql容器
docker exec -it mysql1 /bin/bash
# 添加database
mysql -u root
create database docker;
show databases;
# 中止和刪除容器
docker rm -f mysql1
# 從新建立容器用上一個volume,發現docker還在
docker run -d -v mysql:/var/lib/mysql --name mysql2 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql
# 刪除volume
docker volume rm id
複製代碼
# 當前目錄下的index.html和容器內/usr/share/nginx/html的index.html同步,修改外面的=修改容器內部的
docker run -d -p 80:80 -v $(pwd):/usr/share/nginx/html --name test nginx
複製代碼
Docker Compose是一個經過yml文件能夠同時建立/管理多個容器的工具。 官方地址
# 經過官方的方法太慢,這裏經過python-pip安裝
sudo yum -y install epel-release
sudo yum install python-pip
sudo pip install --upgrade pip
sudo pip --default-timeout=200 install -U docker-compose
docker-compose --version
複製代碼
version: '3'
services:
wordpress:
image: wordpress
ports:
- 8080:80
depends_on:
- mysql
environment:
WORDPRESS_DB_HOST: mysql
WORDPRESS_DB_PASSWORD: root
networks:
- my-bridge
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: wordpress
volumes:
- mysql-data:/var/lib/mysql
networks:
- my-bridge
volumes:
mysql-data:
networks:
my-bridge:
driver: bridge
複製代碼
# 運行(默認名稱docker-compose.yml能夠不指定)
docker-compose -f docker-compose.yml up -d
# 啓動
docker-compose start
# 查看Image
docker-compose images
# 進入容器
docker-compose exec mysql bash
# 中止
docker-compose stop
# 中止容器服務且刪除容器
docker-compose down
# 水平拓展(先啓動一臺test再執行)
docker-compose --scale test=3 -d
複製代碼