netnr/ install-docker.sh 2019-02-19 11:10
linux 安装 docker
wget -qO- get.docker.com | bash # 一键安装

# ubuntu 清华镜像安装
apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common # 安装依赖
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
add-apt-repository "deb [arch=amd64] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu $(lsb_release -cs) stable" # 添加 arm64 软件仓库
apt-get update && apt-get install docker-ce docker-ce-cli containerd.io
# help
https://mirror.tuna.tsinghua.edu.cn/help/docker-ce/
https://docs.docker.com/engine/install/ubuntu/

# 安装方式二:
# 在新主机上首次安装Docker CE之前,需要设置Docker存储库。之后,您可以从存储库安装和更新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

yum install docker-ce docker-ce-cli containerd.io # 安装最新版本的Docker CE和containerd

# CentOS8
dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
dnf list docker-ce
dnf install docker-ce --nobest -y

https://linuxconfig.org/how-to-install-docker-in-rhel-8 # help

systemctl start docker # 启动
systemctl enable docker # 开机启动

yum remove docker-ce # 卸载

# help
https://docs.docker.com/install/linux/docker-ce/centos/

# Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
systemctl daemon-reload
systemctl restart docker.service

vi /etc/docker/daemon.json # Docker 国内镜像,拷贝以下内容:
{
    "registry-mirrors": [ "https://dockerproxy.com", "https://docker.mirrors.ustc.edu.cn", "https://docker.nju.edu.cn" ]
}

systemctl restart docker # 重启使配置生效

# 修改目录
systemctl stop docker.service # 关闭docker服务 (Warning docker.socket:systemctl stop docker.socket) 
mv /var/lib/docker /package/docker-data # 移动数据到新的目录

# 修改docker.service文件,末尾追加 --graph 参数
vi /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --graph /package/docker-data

systemctl daemon-reload && systemctl restart docker.service # reload配置&&重启
docker info | grep Dir # 查看数据目录

# 常用命令记录

docker -v # 获取版本
docker ps # 列出容器
docker ps -a # 显示所有的容器,包括未运行的
docker rm 容器ID # 删除容器
docker exec -it 容器ID /bin/bash # 进入正在运行的某个容器
docker exec -it 容器ID /bin/bash -c "date"  # 宿主执行容器里面的命令
docker start 容器ID或容器名 # 启动容器
# 停止容器,参数 -t:关闭容器的限时,如果超时未能关闭则用kill强制关闭,默认值10s,这个时间用于容器的自己保存状态 
docker stop 容器ID或容器名
docker stop -t=60 容器ID或容器名
docker kill 容器ID或容器名 # 直接关闭容器
docker restart 容器ID或容器名 # 不管容器是否启动,直接重启容器
docker images # 列出镜像
docker rmi 镜像ID # 删除某镜像
docker search 关键字 # 镜像搜索
docker pull 镜像名称 # 下载镜像
docker run -it 镜像名称 /bin/bash # 运行镜像&进入命令
docker tag 镜像ID 仓库:标签 # 根据镜像ID重命名仓库和标签
docker build -t 包名:tag . # 构建
docker run -p 8080:80 --name 别名 镜像ID # 运行
docker logs -f $ID # 查看输出日志
docker cp 容器ID:/etc/hosts /tmp # 拷贝:容器→宿主
docker cp /tmp/a.txt 容器ID:/tmp  # 拷贝:宿主→容器

# Docker的持久化存储

docker volume ls # 查看volume列表
docker volume inspect 6ce358b6561136550039f9ec640b1aa0c89dfd05e5ea1c2ec4e2f8a7e37ca011 # 查看详情
docker volume rm 6ce358b6561136550039f9ec640b1aa0c89dfd05e5ea1c2ec4e2f8a7e37ca011 # 删除volume
# 创建服务并指定volume名称和路径 -v netnr:/netnr
# 这种模式下,数据会保存到指定位置,即时删除了容器,数据也会保留,下次创建指定此路径的话,数据会恢复
docker run -v /netnr:/netnr -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=yourStrong(!)Password' -p 1433:1433 -d justin2004/mssql_server_tiny

# help
https://blog.csdn.net/fanxl10/article/details/83818402

# 修改已创建容器的参数
docker container update --restart=always 容器ID
docker update --restart=no 容器ID

# 停整个服务修改某个实例的端口
systemctl stop docker # systemctl stop docker.socket
cd /var/lib/docker/containers && ls -lh
docker ps -a # 查看容器 ID 再进入该 ID 文件夹
vi hostconfig.json # 修改容器端口映射 PortBindings
vi config.v2.json # 修改容器要暴露的端口 ExposedPorts
systemctl start docker # 启动 docker 服务

https://www.hangge.com/blog/cache/detail_2411.html

# export container 导出容器为镜像
docker export 容器ID > cbox.tar # 容器导出镜像
docker import - new_cbox < cbox.tar # 导入镜像
# save images 保存镜像
docker save 镜像ID > ibox.tar # 镜像保存为文件
docker save -o ibox.tar postgres:9.6 mongo:3.4 # 多个镜像打包
docker load < ibox.tar # 载入镜像
# 使用 import 导入 save 产生的文件会出错
# export 文件小于 save
# import 可以重命名镜像,load 不能重命名镜像
# save 可以打包多个镜像,export 不支持多个容器
# export 主要用来制作基础镜像再进行一些设置,save 多个镜像打包拷贝到客户服务器上载入