docker 安装文档
--
1. ubuntu 安装 docker
安装命令:
-
###Docker 的旧版本被称为 docker,docker.io 或 docker-engine 。如果已安装,请卸载它们:
sudo apt-get remove docker docker-engine docker.io containerd runc
-
###apt 依赖包
sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common
-
####添加 Docker 的官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
-
1.设置稳定版本
sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable"
-
1.1 这里可能出先 sourcelist 的错误,解决办法把 source.list 中的 docker 修改如下
deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable
-
1.2 更新 apt 并安装最新的 docker;同时测试是否安装成功
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
sudo docker run hello-world
-
1.3 镜像加速 Ubuntu16.04+、Debian8+、CentOS7
对于使用 systemd 的系统,请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件):
{"registry-mirrors":["https://registry.docker-cn.com"]} 重启docker服务 sudo systemctl daemon-reload sudo systemctl restart docker
-
1.4 添加当前用户到 docker 用户组,可以不用 sudo 运行 docker(可选)
Ubuntu16.04 添加 Docker用户组 将用户添加到docker用户组就不用每次都 sudo了。 ### 首先创建用户组 sudo groupadd docker 将用户加如组 sudo gpasswd -a ${USER} docker 重启服务 sudo service docker restart 切换当前会话到新组 newgrp - docker
-
1.5 测试添加用户组(可选)
docker run hello-world
-
1.6 设置开机启动
sudo systemctl enable docker sudo systemctl start docker
docker 容器常用操作命令
-
2.1 使用镜像启动一个容器
docker run ubuntu:16.04 /bin/echo "sunbing nihao"
-
2.2 docker 后台启动
-
2.3 docker 交互式
docker run -i -t ubuntu:15.10 /bin/bash
-
2.4 查看标准输出和容器列表
docker logs 容器名称或者id
docker ps
-
2.5 容器命令
docker start/stop b750bbbcfd88 docker run -itd --name ubuntu-test ubuntu /bin/bash 后台启动 在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入: docker attach 退出容器是会关闭 docker exec:推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。 docker exec -i -t 243c32535da7 /bin/bash 导出本地容器:docker export 1e560fca3906 > ubuntu.tar 导入容器快照:可以使用 docker import 从容器快照文件中再导入为镜像,以下实例将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1: 方式一:$cat docker/ubuntu.tar | docker import - test/ubuntu:v1 方式二:此外,也可以通过指定 URL 或者某个目录来导入,例如: $docker import http://example.com/exampleimage.tgz example/imagerepo 删除容器:docker rm -f 1e560fca3906、 清理所有终止容器:docker container prune 根据网络端口查看:docker port id/name 查看容器内部的程序进程:docker top id/name 查询最后一次创建的容器:docker ps -l
-
2.6 容器启动 flask 应用程序并映射容器端口到本地端口
后台启动将内部容器端口映射到主机上 -P默认端口 docker run -d -P training/webapp python app.py 后台启动映射到主机指定端口 docker run -d -p 5000:5000 training/webapp python app.py
-
2.7 宿主机和容器之间的交互操作
复制、移动文件操作 1.宿主机到容器 docker cp 本地路径 容器:容器内部路径 2.容器到宿主机 docker cp 容器:容器内部路径 本地路径 3. 不管容器是否启动复制操作都会生效
docker 镜像操作
1.查找镜像 docker search nginx
2.拉取镜像 docker pull imagname
3.删除镜像 docker rmi imagename
1>从从已有的镜像中更新镜像,并提交镜像
2>使用dockfile文件重新创建一个镜像
4.1 dockerfile 文件格式指明了镜像源 以及容器内运行的相关命令,安装的相关的软件
FROM centos:6.7
MAINTAINER Fisher "fisher@sudops.com"
RUN /bin/echo 'root:123456' |chpasswd
RUN useradd sunbing
RUN /bin/echo 'sunbing:123456' |chpasswd
RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE 22
EXPOSE 80
CMD /usr/sbin/sshd -D
4.2启动新创建的容器 docker build -t runoob/centos:6.7 Dockerfile 所在路径
4.3 为容器制定标签 docker tag 860c279d2fec runoob/centos:dev
4.4 将宿主机的目录挂载到容器里面 docker run -it -v test:/bing ubuntu:16.04 /bin/bash
docker 搭建 docker hub 远程仓库
docker 构建本地私有仓库
1.创建一个 docke 仓库 docker_registry 在 docker_registry 目录下下载 registry 镜像 docker pull registry
2.默认情况下,会将仓库存放于容器内的/var/lib/registry 目录下,这样如果容器被删除,则存放于容器中的镜像也会丢失,所以我们一般情况下会指定本地一个目录(刚刚创建的/home/docker_registry)挂载到容器内的/var/lib/registry 下,如下:
docker run -d -p 5000:5000 -v /home/docker_registry:/var/lib/registry registry
3.镜像标记
docker tag IMAGE[:TAG] [REGISTRY_HOST[:REGISTRY_PORT]/]REPOSITORY
docker tag ubuntu:latest 127.0.0.1:5000/ubuntu:latest
4.容器内部更改之后打包成新的镜像
docker commit container_id 名称
eg:docker commit 1nfiji90 kaldi/ubuntu:v1
5.推送容器到私有仓库 dock push ..
6.通过 root 账号启动容器进行各种安装 安装之前要更新原始的安装源
apt-get update
docker exec -u 0 -it 623698865ff7(容器id) bash
docker 容器内部更改 apt 国内镜像源
备份原始文件
mv /etc/apt/sources.list /etc/apt/sources.list.bak
重新写入镜像源
ehco ""<<sources.list
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
##测试版源
deb http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse
# 源码
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
##测试版源
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse
# Canonical 合作伙伴和附加
deb http://archive.canonical.com/ubuntu/ xenial partner
deb http://extras.ubuntu.com/ubuntu/ xenial main
#更新安装源
apt-get update
--
docker 私有仓库镜像使用问题集锦
1. 其他机器拉取时失败问题
现象:把harbor端口默认的80端口修改为1180,然后打了个测试镜像上去,但是在test102机器pull镜像的时候失败了,报错如下:
Get https://10.0.0.101/v1/_ping: dial tcp 10.0.0.101:443: getsockopt: connection refused
解决办法:在另一台机器上的docker的配置文件没有修改,于是在 /etc/docker/daemon.json 加上了“--insecure-registry=10.0.0.101:1180”
注意:重启配置文件和docker (systemctl daemon-reload) 先后执行(systemctl retart docker)
2. 进入容器之后拉取代码显示无解析主机
现象:fatal: unable to access 'https://e.coding.net/sunboy_magic/help_accept.git/': Could not resolve host: e.coding.net
解决办法:首先:ping host 其次在/etc/hosts 文件中加入一行 ip host 例如:118.126.70.252 e.coding.net
3. 端口443 问题
现象:fatal: unable to access 'https://e.coding.net/sunboy_magic/help_accept.git/': Failed to connect to e.coding.net port 443: No route to host
解决办法:启动时指定--host参数,目的是容器使用宿主机器的端口,进行通信,可以解决各种端口问题,非常暴力。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于