Docker 命令

安装

centos7

# 添加源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 查询可用列表
yum list docker-ce --showduplicates | sort -r
# 安装
sudo yum install docker-ce 

sudo systemctl start docker

启动容器

sudo docker run -d -p 8888:8888 --name hello-world hello-world:latest
sudo docker run ubuntu:15.10 /bin/echo "Hello world"	
参数说明
-t在新的容器内指定一个伪终端或终端
-i允许你对容器内的标准输入(STDIN)进行交互
-d以进程方式运行 (后台模式)
ps当前正在运行的容器 (-a 全部容器 , -q 只显示id)
logsdocker log 容器id 查询指定容器内的标准输出
stop停止容器
rm后面加上id,删除容器(删除全部docker rm $(docker ps -a -q)
rmi删除images文件
accach后面加上id,进入正在运行的后台容器(exit结束后,容器退出后台运行)
execdocker exec -it 123 /bin/sh 进入后台运行的容器,退出后不会退出容器

进入docker 容器

docker exec -it [哈希值] bash

查看当前容器

sudo docker ps -a

停止docker容器

sudo docker stop [id或名称]

删除docker容器

sudo docker rm [id或名称]

查看docker镜像

sudo docker images

下载docker镜像

sudo docker pull  <hub-user>/<repo-name>:<tag>

上传文件到dokcer

docker cp /root/test.txt [id或名称]:/root/

下载文件到宿主机

docker cp [id或名称]:/root/test.txt /root/

换源

换源 - 命令

python -m pip install XXXXX -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn

换源 - linux 配置

修改或添加文件~/.pip/pip.conf

[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host=pypi.tuna.tsinghua.edu.cn

换源 - windows 配置

修改或添加文件C:\Users\xx\pip\pip.ini

[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host=pypi.tuna.tsinghua.edu.cn

删除docker镜像

sudo docker rmi [imageId或tagName]

打镜像标签

sudo docker tag [IMAGE ID or REPOSITORY] [hub-user-name]/[repo-name]:[tag]

Dockerfile

编写Dockerfile文件

# 基于java镜像
FROM java:8
# 
VOLUME /tmp
# 将文件添加到容器中
ADD halo.jar /halo.jar
# run命令
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/halo.jar"]

制作镜像

docker build -t [镜像名称] .
# -t : 指定镜像名称
# .  : 表示Dockerfile所在路径,需要指定Dockerfile文件路径使用 `-f`
# -f : 后面跟俩个参数,[1]Dockerfile文件路径,[2]Dockerfile制作所在文件夹

命令解释

  • FROM
    • 声明使用的基础镜像
  • RUN
    • 只在build的时候执行
    • 终版的时候少用RUN,善用 && 符合链接命令
  • COPY
    • 接收2个参数【源路径】和【目标路径】
    • 源路径可以是文件或目录。.表示目录下全部文件。?统配任意字符
    • 目标路径,不存会自动创建
  • CMD
    • docker run运行时执行,仅最后一个生效
    • 提供多个参数,第一个为执行文件或命令,后面为参数,多个参数需要分写CMD ["java","-jar","app.jar"]
    • 也可以为ENTRYPOINT命令提供参数。
  • ENTRYPOINT
    • 一般为定好的程序默认需要执行的,不会被docker run命令覆盖,如果需要覆盖则需要使用--entrypoint参数。
    • 其他与CMD一致
  • EXPOSE
    • 仅声明当前docker使用了这个端口
    • 可以搭配docker run 中的-P使用。(注意是大写的 P )
  • ENV
    • 设置环境变量

docker-compose

运行 docker-compose.yml

sudo docker-compose up -d

上传镜像到docker hub

  1. 先在本地打包好镜像
  2. 为镜像打标签
  3. 登录docker hub
  4. push镜像
  5. 验证(参见下载镜像)

登录docker hub

sduo docker login

如果出现 Error saving credentials: error storing credentials - err: exit status 1, out:Cannot autolaunch D-Bus without X11 $DISPLAY`的问题

  • 可能原因是docker的一个bug
  • 首先查看下是否装了 docker-compose sudo docker-compose version
  • 若装了,则需卸载docker-compose后再执行docker命令
  • 卸载命令 ubuntu sudo apt-get autoremove --purge docker-compose
    来源

push 镜像

docker push <hub-user>/<repo-name>:<tag>

参考1
参考2

常见异常问题

  1. WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7f5312976190>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/XXXXX/
    方案:在宿主机中更改/usr/lib/sysctl.d/00-system.conf文件,添加net.ipv4.ip_forward=1,然后重启网络systemctl restart network