本文基于Mac
以前都只是听说docker,现在项目组要进行自动打包,以前都是组长超哥搭建的,超哥走后没人会弄的,赶上手上没有开发任务,就试着玩玩,从周一到周三(今个就是周三),翻找各种资料进行搭建,下载docker,下载镜像,完全都是找别人的博客区搭建,对docker,gitlab,gitlab-ci,gitlab-runner 还有.gitlab-ci.yml这个配置文件全都不懂。今天用于掉坑里了,想要找原因,找问题都不知道从什么地方下手,一遍又一遍的重试,我受够了,全部卸载,重新搞。也给自己长个记性,不要区复制人家的代码,那不是你写的。
下载docker
Docker官网
https://www.docker.com
mac版 下载地址 以及测试是否好使
https://store.docker.com/editions/community/docker-ce-desktop-mac
Docker for Mac vs. Docker Toolbox
如果你的电脑上已经装了 Docker Toolbox在想安装Docker for Mac,建议你一定看看这个网址,Docker for Mac 和 Docker Toolbox共存
https://docs.docker.com/docker-for-mac/docker-toolbox/
Docker Toolbox
Mac Docker Toolbox下载地址
https://docs.docker.com/toolbox/toolbox_install_mac/
Docker Toolbox在Mac上的
/usr/local/bin中安装docker,docker-compose,docker-machine。 它还安装VirtualBox。 在安装的时候,Toolbox使用docker-machine来配置一个名为default的VirtualBox虚拟机.
在Mac上使用docker或docker-compose之前,通常使用命令eval $(docker-machine env default)来设置环境变量,以便docker或docker-compose知道如何与在VirtualBox上运行的Docker Engine通信。

Docker for Mac
- Docker for Mac不使用VirtualBox,而是HyperKit,一种基于Hypervisor的轻量级MacOS虚拟化解决方案.

Docker Toolbox and Docker for Mac coexistence共存

猜猜看
- docker-compose.yml 文件用于定义Docker容器在生产过程中的行为。
Docker 命令
基本命令
- docker run -d -p 80:80 --name webserver nginx 镜像如果在本地找不到就从Docker Hub上拉。
- docker ps 查看正在运行的容器
- docker ps -a 查看正在运行的容器包括已经停止的
- docker start <names> 开启容器 names 可以查看 ps命令 names字段
- docker stop <names> 关闭容器
- docker rm -f <names> 删除指定容器
- docker images 查看镜像列表
- docker rmi <name or id> 删除镜像 name,id是 docker images中的REPOSITORY字段,IMAGE ID字段
- docker rmi -f <> 强制删除镜像
- docker inspect <id> 查看容器的详细信息
- docker run -p 4000:80 <images> 使用-p,将您的计算机的端口4000映射到容器发布的端口80。
- docker rm $(docker ps -aq) 删除所有容器
- docker stop $(docker ps -q) & docker rm $(docker ps -aq)
一条命令停用并删除容器
docker run 语法
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
- -d: -d: 后台运行容器,并返回容器ID
- -i: 以交互模式运行容器
- -t: 为容器重新分配一个伪输入终端
- -P: 指定端口映射.Docker 会随机映射一个 49000~49900 的端口到内部容器开放的网络端口。
- -p:则可以指定要映射的端口,并且,在一个指定端口上只可以绑定一个容器。支持的格式有ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort
- --link 参数可以让容器之间安全的进行交互。--link 参数的格式为 --link name:alias,其中 name 是要链接的容器的名称,alias 是这个连接的别名。
Docker使用遇到的问题
docker login 登陆认证失败
- 问题:
Error response from daemon: Get https://registry-1.docker.io/v2/: unauthorized: incorrect username or password
- 原因:
使用email可以登陆,但是使用命令docker login使用email是不可以登陆的,用户名是DockerHub上的独一无二的用户名。 - 解决使用唯一的用户名fengxing

docker build -t friendlyhello . 下载所需要的文件时报错
- 问题
Get https://registry-1.docker.io/v2/library/python/manifests/2.7-slim: unauthorized: incorrect username or password
- 原因 由于是公共的repo 所以不需要登陆
- 解决
docker logout
然后在拉
docker push 问题
- 问题
denied: requested access to the resource is denied - 原因
语法docker push username/repository:tag
username是你DockerHub中的用户名 - 解决
查看本地镜像
➜ Dockerfile docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
friendlyhello latest 2ea789bd3491 About an hour ago 195MB
test part 2ea789bd3491 About an hour ago 195MB
test/get-started part2 2ea789bd3491 About an hour ago 195MB
<none> <none> b0d47be5c956 2 hours ago 184MB
learn/ping latest 8f10d061d860 18 hours ago 140MB
gitlab/gitlab-ce latest 556635d89f7c 3 days ago 1.28GB
ubuntu latest 747cb2d60bbe 9 days ago 122MB
python 2.7-slim 9724e90f1f17 10 days ago 184MB
gitlab/gitlab-runner latest fa332bc1925c 2 weeks ago 371MB
busybox latest 54511612f1c4 5 weeks ago 1.13MB
rancher/agent v1.0.2 860ed2b2e8e3 16 months ago 454MB
learn/tutorial latest a7876479f1aa 4 years ago 128MB
使用 docker tag改名字
➜ Dockerfile docker tag 2ea789bd3491 fengxing/test:part
在此查看镜像改名成功
➜Dockerfile docker images
在次push
docker push fengxing/test:part
docker push 出现 ... net/http: TLS handshake timeout
- 问题
Post https://registry-1.docker.io/v2/fengxing/test/blobs/uploads/: net/http: TLS handshake timeout
- 原因: 应该是被屏蔽了
- 解决
- 使用国内镜像
- 稍后再次push