目录
1. 运行docker pull命令拉取registry镜像
一. 安装docker
使用版本为centos6
先卸载之前版本
yum erase $(rpm -qa | grep docker)
1. 下载docker,设置文件保存位置
(如果没有,换docker-io 或者
yum install epel-release 安装epel后再次下载)
yum -y install docker
修改docker.service文件,使用--graph参数指定存储位置
vim /usr/lib/systemd/system/docker.service
文本内容:ExecStart=/usr/bin/dockerd下面添加如下内容:
--graph /home/tools/docker/data \
2. 修改完成后reload配置文件
sudo systemctl daemon-reload
3. 重启docker服务
sudo systemctl restart docker.service
二.启动docker
1. 启动命令
# centos6
service docker start
# centos7
systemctl/service start/stop/status docker
2. 查看版本
docker -v
3. 搜索镜像,下载镜像
搜索镜像
docker search [镜像名称]
拉取镜像
docker pull [对应的镜像名称]
下载镜像速度较慢,可以修改拉取镜像的地址为国内地址 如下
vi /etc/docker/daemon.json
输入替换内容为:
{"insecure-registries":["192.168.101.11:5000"]}
192.168.101.11:5000表示docker源的地址
4. 查看镜像列表
docker images
5. 启动容器
(1)守护式启动(后台启动)
docker run -di --name=容器名称 容器:标签 -p 宿主机端口:容器端口 -v 宿主机目录:容器目录
# 指定容器对映射目录的修改权限
\--privileged=true
登录守护式容器
docker exec -it 容器名称/容器id /bin/bash
(2)交互式启动(前台启动,退出界面停止容器)
# 运行容器
docker run -it --name=容器名称 容器:标签 -p 宿主机端口:容器端口 -v 宿主机目录:容器目录
# 退出当前容器
exit
6. 停止容器
docker stop/start 容器名称/id
7. 文件拷贝
# 拷贝到容器中
docker cp 宿主机文件 容器名称:容器文件路径
# 拷贝到主机中
docker cp 容器名称:容器文件路径 宿主机文件
8. 查看容器ip
docker inspect 容器名称
9. 删除容器
# 只能删除停止的容器
docker rm 容器id
10. 删除镜像
docker rmi 镜像id
11. 保存容器为镜像
docker commit 当前需要保存的镜像名称 新的镜像名称
12. 备份镜像
docker save -o 压缩后的镜像名称.tar 需要压缩的镜像名称
13. 迁移恢复镜像为容器
docker load -i 压缩后迁移到本机的镜像名称.tar
14. 查看ip
# 查询对应容器名称的ip
docker inspect containerName
15. 卸载
# 查找安装过的docker
rpm -qa | grep docker
# 卸载安装
rpm -e name
# 删除镜像与容器
rm -rf /var/lib/docker
三. docker自动化脚本
#!/bin/bash
case $1 in
"docker")
systemctl $2 docker
;;
"img")
docker images
;;
"run")
docker run -d -t -p $3 --privileged=true --name=$2 $3 /home/tools/shell/startup.sh
;;
"ps")
docker ps -a
;;
"del")
docker stop $2
docker rm $2
;;
"delimg")
docker rmi $2
;;
"start"|"restart"|"stop")
docker $1 $2
;;
"commit")
docker commit $2 $3
;;
"save")
docker save -o ${3}.tar $2
;;
"load")
docker load --input $2
;;
"cli")
docker exec -it $2 /bin/bash
;;
"cp")
docker cp $2 $3
;;
"ip")
docker inspect $2
;;
"tag")
docker tag $2 $3
;;
*)
echo "--------------------------------------------------"
echo "请输入参数 { docker | images | run | show | del | delimage | ves | commit | save | load | client | cp | ip }"
echo "docker {} | 操作docker { start | stop | status }"
echo "img | 列出所有镜像"
echo "run {} {} | 创建镜像为容器 { 别名 } { 镜像id } { 端口映射 }"
echo "ps | 显示所有容器"
echo "del {} | 停止并删除容器 { 容器ID }"
echo "delimg {} | 删除镜像 { 镜像ID }"
echo "{} {} | 操作容器 { start | stop | restart } {容器ID}"
echo "commit{} {} | 容器提交为镜像 { 容器ID } { 保存之后的镜像ID }"
echo "save {} {} | 将镜像保存成本地文件 { 保存的镜像ID } {保存之后的文件名称} "
echo "load {} | 载入本地镜像 { 本地文件名称 }"
echo "cli {} | 进入容器 { 容器ID }"
echo "cp {} {} | 宿主机与镜像之间拷贝 { 容器ID:/path } { path } "
echo "ip {} | 获取容器的ip { 容器ID }"
echo "tag {} {} | 将容器打包为标签 { 容器ID } { 标签 }"
echo "--------------------------------------------------"
;;
esac
四. docker本地私服安装
1. 运行docker pull命令拉取registry镜像
docker pull registry
2. 通过registry镜像启动一个容器
docker run -d -t -p 5000:5000 --restart=always --name registry docker.io/registry:latest
3. 打开浏览器查看运行状况
localhost:5000/v2/ 下图表示正常
4. 给新的镜像打包标签
docker tag mydockerone 192.168.100.1:5000/
docker pull 192.168.100.1:5000/镜像名称
镜像名称 ([:版本号] 可选)
(mydockerone表示打包的镜像名称 192.168.100.1:5000/镜像名称 表示打包之后的名称)
5. 修改docker连接地址优先使用本地私服地址
vim /etc/docker/daemon.json
{"insecure-registries":["192.168.100.1:5000"],"graph": "/home/docker/data"}
graph表示docker镜像保存位置
6. 上传镜像到到私库
docker push 192.168.100.1:5000/镜像名称
访问web页面查看是否有对应的镜像
7. 本地服务器拉取私服镜像
docker pull 192.168.100.1:5000/镜像名称
8. 其他服务器拉取镜像
8.1. 配置优先拉取镜像的地址
vim /etc/docker/daemon.json {"insecure-registries":["192.168.100.1:5000"]}
8.2. 拉取镜像
docker pull 192.168.100.1:5000/yxp/python
9. 设置带有权限的私服
9.1. 创建宿主机存放密匙的目录
mkdir /home/pwd
9.2. 写入密码
docker run --entrypoint htpasswd registry -Bbn username userpasswd > /home/pwd/htpasswd
9.3. 以带有权限的方式启动容器
docker run -d -t -p 5000:5000 -v /home/pwd:/auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd --name registry docker.io/registry:latest
9.4. 设置登录登出(需要写ip)
# 登录:
docker login -u username -p userpasswd 192.168.100.1:5000
# 退出:
docker logout 192.168.100.1:5000
9.5. 删除私服中的镜像
docker exec registry rm -rf /var/lib/registry/docker/registry/v2/repositories/<镜像名称>
docker exec registry bin/registry garbage-collect /etc/docker/registry/config.yml
10. 最小包Alpine
docker有一个最小包Alpine,可以直接通过镜像下载对应的最小包 例如python3的最下包为 alpine-python
10.1. 搜索指令
docker search alpine-python
找到对应的标签版本进行下载
10.2. python安装依赖
pip install 对应的包名称
10.3. 修改Alpine 的apk为阿里源
vi /etc/apk/repositories
http://mirrors.ustc.edu.cn/alpine/v3.5/main
http://mirrors.ustc.edu.cn/alpine/v3.5/community
10.4. 更新apk
apk update
10.5. Alpine 搜索依赖
apk search ffmpeg
10.6. Alpine 安装依赖
apk add ffmpeg
10.7. 安装时区alpine依赖
apk add chrony
启动 chronyd
#1.安装时区依赖
apk add tzdata
#2.复制上海时区
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#3.指定为上海时区
echo "Asia/Shanghai" > /etc/timezone
#4.验证
date -R
宿主机与docker容器的时区同步方式,共享时区文件
-v /etc/localtime:/etc/localtime:ro
10.8. docker支持中文
# shell输入
export LANG=C.UTF-8
11. docker 设置镜像保存位置
11.1. 安装后修改配置文件
vim /usr/lib/systemd/system/docker.service
11.2. 写入新的保存绝对路径
ExecStart=/usr/bin/dockerd --graph
11.3. 保存退出后,重新加载配置文件
systemctl daemon-reload
11.4. 启动docker
systemctl start docker
五. docker内部运行脚本
内部运行的脚本需要添加 /bin/bash结尾
#!/bin/sh
# 最后必须加/bin/bash ,表示伪终端,否则执行完脚本之后 docker会停止 调用环境变量与脚本,都必须使用绝对路径
echo "123" >> /home/tools/shell/1.txt
/bin/bash