1. 新建一个Dockerfile文件:
# Dockerfile
# 基础镜像版本:https://hub.docker.com/_/centos?tab=tags&page=1&ordering=last_updated
ARG UBUNTU_VERSION=16.04
FROM ubuntu:${UBUNTU_VERSION} AS base
RUN set -x; buildDeps='gcc libc6-dev make wget zlib1g-dev libssl-dev build-essential' \
&& apt-get update \
&& apt-get install -y $buildDeps
RUN apt-get update && apt-get install -y \ # -y表示安装过程中有选择yes/no的默认选yes
python3 \
python3-pip
RUN python3 -m pip --no-cache-dir install --upgrade \
pip \
setuptools
RUN wget https://www.python.org/ftp/python/3.6.12/Python-3.6.12.tgz \
&& tar -xf Python-3.6.12.tgz \
&& cd Python-3.6.12 \
&& ./configure \
&& make \
&& make install \
&& cd .. \
&& rm -rf Python-3.6.12.tgz \
&& rm -rf Python-3.6.12
2. 编译生成docker
systemctl start docker # 如果失败删除rm -rf /etc/docker/daemon.json
docker build -t my_first_docker -f Dockerfile .
# my_first_docker: 生成的IMAGE的名字
# -f后面跟Dockerfile整个配置文件
# 如果更改了image里的镜像,需要在build的时候加上--network=host,这样就会使用/etc/apt目录下面的sources.list作为镜像了(这个文件可以COPY进去).docker run的时候也可以加上这个参数
3. 运行生成的docker run以及参数
docker run --name any_container_name -it -v /home/workspace:/tmp image_id # any_container_name自定义一个名字, -v表示同步本地机器的/home/workspace下的内容到容器的/tmp目录.这样本地修改之后容器上对应的文件也会同步修改.
# 如果希望在docker里使用gdb,那么在创建容器的时候需要加上:
docker run --cap-add=SYS_PTRACE --security-opt seccomp=unconfined
# 在运行docker之后自动运行docker里面的脚本,加上-c参数
docker run --name ..... -c 'shell.sh'
docker attach container_id # 进去某个container或者:
docker exec -it --user root container_id /bin/bash # 以root权限进入某个container
# You cannot attach to a stopped container, start it first
docker start container_id
# docker command
docker ps -a # 查看所有的docker信息
docker images # 查看有哪些生成的docker
docker image rm IMAGE_ID # 删除image
docker image rm REPOSITORY:TAG
# 把生成的Docker保存为文件并从文件
docker save myimage:latest | gzip > myimage_latest.tar.gz
docker load -i myimage_latest.tar.gz
# 有问题的语法:
cat magicmind.tar.gz | sudo docker import - new_image:latest
# 查看所有的正在运行的container
docker container ls -a
docker container rm container_id # 删除某个container
# container和host之间拷贝文件
docker cp container_Id:/file/path/within/container /host/path/target # copy from container to host
docker cp file_name container_id:/path/to # cp host to docker
# docker push (push 到hub)
docker login --username name --password password hub.web.com
docker push iamges_name:tag
# 从container 生成image
docker commit container_id REPOSITORY:TAG
# 更改docker默认存储目录
# 查看默认缓存目录
docker info -f '{{ .DockerRootDir}}'
# /var/lib/docker
sudo systemctl stop docker
sudo vim /lib/systemd/system/docker.service
# 修改
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
# 为(新增data-root目录)
ExecStart=/usr/bin/dockerd --data-root "/share/workspace/docker-data" -H fd:// --containerd=/run/containerd/containerd.sock
sudo systemctl daemon-reload
sudo systemctl restart docker
# 查看目录是否生效
docker info -f '{{ .DockerRootDir}}'
# /share/workspace/docker-data