docker相关

docker

安装

# 卸载老版本
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

# SET UP THE REPOSITORY
sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
    
# Install Docker CE
sudo yum install docker-ce docker-ce-cli containerd.io	

# Start Docker.
sudo systemctl start docker

# Verify that Docker CE is installed correctly by running the hello-world image.
 sudo docker run hello-world
 
# Uninstall Docker CE
1. Uninstall the Docker package:

$ sudo yum remove docker-ce
2. Images, containers, volumes, or customized configuration files on your host are not automatically removed. To delete all images, containers, and volumes:

$ sudo rm -rf /var/lib/docker

常用命令

docker version # 查看版本
docker search hello-world # 搜索docker的镜像
docker pull hello-world # 下载docker的镜像
docker push 镜像名 # 把本地镜像推送到dockerhub
docker image ls # 查看镜像
docker images # 查看镜像
docker run 镜像名/镜像id(可以只写前3位)  起了就关
docker stop 容器id # 停止正在运行的容器
docker start 容器id # 启动一个关闭中的容器
docker run -it 镜像名/镜像id  # 运行一个docker容器实例, 

### 相关参数
-i:交互式界面  
-t:	开启一个终端
-d: 后台运行容器,返回容器ID
--name:给容器起别名
--rm:运行完就删除容器
-P:随机端口转发
-p 外部port:docker内部port: 指定端口转发
-v /data:/data:挂载宿主机的文件到容器文件夹

docker run -d centos /bin/sh -c "while true;do echo hello centos; sleep	1;done"
/bin/sh 调用shell解释器
-c 指定一段shell脚本
docker  logs -f 容器id # 查看正在运行中容器的日志, -f表示不间断打印

docker port 容器id    #查看容器运行端口

docker ps # 查看docker进程,只能查看正在
docker ps -a # 查看所有运行过的docker容器记录
docker ps -qa # 查看id
docker rm 容器id # 删除的是已经停止的容器
docker rm `docker ps -aq`   # 一次性删除所有容器
docker rmi 镜像id # 删除一个镜像记录,必须把和该镜像相关的容器全删除后才能删除镜像

docker commit # 提交容器记录为新的镜像


docker exec -it 容器id /bin/bash  # 进入正在后台运行的docker

导出、导入镜像

# 导出centos镜像
docker save centos > /data/centos.tar.gz

# 导入centos镜像
docker load centos < /data/centos.tar.gz

Dockerfile

Dockerfile就是一个文本,里面包含一条条指令。每条指令构建一层,所以每条指令就是描述该层应当如何构建。

# myflask.py
from flask import Flask

app = Flask(__name__)

@app.route("/")
def index():
    return "hello"

if __name__ == "__main__":
    app.run(host="0.0.0.0", port="5000")

# Dockerfile示例
FROM centos
LABEL maintainer="xxx@163.com"
ADD CentOS-Base.repo /etc/yum.repos.d
ADD CentOS-Epel.repo /etc/yum.repos.d
RUN echo "hah"
RUN yum clean all
RUN yum update -y
RUN yum install python-pip -y
RUN pip install flask
RUN mkdir app
RUN echo "hah"
COPY my_flask.py app  # 将本地Dockerfile同目录的my_flask.py拷贝到容器指定目录
WORKDIR app
EXPOSE 5000 # 暴露容器的5000端口,给宿主机访问
CMD python my_flask.py  # 运行文件

# 构建docker镜像文件
 docker build -t  docker账户名/镜像名 .
 
# 运行
docker run -d -p 8080:8080 docker账户名/镜像名

#发布自己的镜像
1. docker login
2. 更改现有镜像的名字为:dockerUsername/镜像名
docker tag 7698f282e524 tmdhhl/python3:latest
3. docker push 本地镜像

构建私有仓库

# 下载docker官方提供的私有仓库镜像
下载并启动官方registry镜像
docker run -d \
    -p 5000:5000 \
    -v /opt/data/registry:/var/lib/registry \
    registry

# 使用 docker tag 来标记一个镜像,然后推送它到仓库
# 格式: docker tag IMAGE[:TAG] [REGISTRY_HOST[:REGISTRY_PORT]/]REPOSITORY[:TAG]

docker tag ubuntu:latest 127.0.0.1:5000/ubuntu:latest

# 查看仓库中的镜像
curl 127.0.0.1:5000/v2/_catalog

# 下载本地仓库中的镜像
docker pull 127.0.0.1:5000/ubuntu:latest

注意事项

如果你不想使用 127.0.0.1:5000 作为仓库地址,比如想让本网段的其他主机也能把镜像推送到私有仓库。你就得把例如 192.168.199.100:5000 这样的内网地址作为私有仓库地址,这时你会发现无法成功推送镜像。

这是因为 Docker 默认不允许非 HTTPS 方式推送镜像。我们可以通过 Docker 的配置选项来取消这个限制。

# 在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件)
{
  "registry-mirror": [
    "https://registry.docker-cn.com"
  ],
  "insecure-registries": [
    "192.168.199.100:5000"
  ]
}
注意:该文件必须符合 json 规范,否则 Docker 将不能启动

更多高级使用:https://yeasy.gitbooks.io/docker_practice/repository/registry_auth.html

posted on 2019-04-16 10:04  透明的洪湖里  阅读(191)  评论(0编辑  收藏  举报