本文作者:陈进坚
个人博客:https://jian1098.github.io
CSDN博客:https://blog.csdn.net/c_jian
简书:https://www.jianshu.com/u/8ba9ac5706b6
联系方式:jian1098@qq.com
注意事项
- docker只能运行Linux系统
基本组成
- 客户端Client
- 守护进程Daemon
- 镜像Image
- 容器Container
- 仓库Registry
安装环境
- Docker维护版本(推荐)
curl -sSl https://get.docker.com/|sudo sh
- Ubuntu维护版本
sudo apt-get install docker.io
source /etc/bash_completion.d/docker.io
查看版本
sudo docker.io version
查看docker配置信息
docker info
配置文件
/etc/default/docker
重启docker
systemctl restart docker
启动容器
单次启动容器
docker run 镜像名 命令 参数
例:
sudo docker run ubuntu echo 'Hello world'
按Ctrl+C
退出容器
为了方便非root用户运行,可以加入到用户组后运行
sudo groupadd docker
sudo gpasswd -a ${USER} docker
sudo service docker restart
交互式容器
docker run --name=container01 -it 镜像名 bash
-i:–interactive=true 默认false,保持交互状态
-t:–tty=true 默认false,提供tty终端
完整的创建容器命令
docker run -it --name=EntWallet -p 8888:8888 --mount type=bind,source=/data/golang/EntWallet,target=/data/golang ubuntu bash
–name:自定义容器名
–mount:挂载共享目录,source:宿主机目录,target:容器目录
-P:映射全端口
-p:映射指定端口,前面是宿主机端口,后面是容器端口,访问宿主机端口就相当于访问容器的绑定端口
-d:后台启动
-v:目录映射,例如host_dir:container_dir
对应宿主机和容器目录,绑定后两个目录的数据将同步,容器被删除后宿主机数据不会删除;如果新容器映射这个目录,数据将同步到容器中
守护式容器
- 方法一:启动交互式容器后顺序按下
Ctrl+P
和Ctrl+Q
进入正在运行的容器
docker attach 容器名或ID
或
docker exec -it 容器名 /bin/bash
- 方法二:直接加
-d
参数启动
docker run -d 镜像名 命令参数
退出当前容器:exec
停止守护式容器
docker stop 容器名
或
docker kill 容器名
区别:stop会发出停止信号等待容器停止并返回容器名,kill会直接快速停止容器
查看容器
容器列表
docker ps [-a] [-l]
不加参数:列出正在运行的容器
-a:列出所有容器
-l:列出最新创建的容器
获取容器完整id
docker inspect lnmp|grep Id
通过ID查看容器详情
docker inspect 容器ID或仓库名+tag名
通过容器名查看容器详情
自定义容器名称
docker run --name=container01 -i -t ubuntu /bin/bash
查看详情
docker inspect container01
重新启动已停止的容器
docker start [-i] 容器名
-i :交互命令行
删除已停止的容器
docker rm 容器名或ID
参数:
-f:强制删除正在运行的容器
删除所有容器
docker rm `docker ps -a -q`
查看容器日志
docker logs [-f] [-t] [--tail] 容器名
-f:–follows=true 默认false,跟踪日志并返回结果
-t:–timestamps=true 默认false,返回结果加上时间戳
–tail:=‘all’,显示的条数,默认全部显示
注意:容器重启后ip和端口映射都会发生变化
查看容器内进程
docker top 容器名
在运行中的容器启动新进程
docker exec [-d] [-i] [-t] 容器名 命令 参数
帮助命令
man docker-rum
man docker-logs
man docker-top
......
设置容器的端口映射
docker run -P -i -t ubuntu /bin/bash
-P:–publish-all=true 默认false,映射容器所有端口
-p:指定映射端口;-p 80 :只指定容器端口;-p 8080:80 :指定宿主机和容器端口;-p 0.0.0.0:80:指定容器ip和端口;-p 0.0.0.0:8080:80:同时指定ip、宿主机和容器端口;
给已存在的容器添加端口映射
提交一个运行中的容器为镜像
docker commit containerid foo/live
运行镜像并添加端口
docker run -d -p 8000:80 foo/live /bin/bash
镜像
镜像列表
docker images
-a,–all=false:显示所有镜像,包括没有标签的中间层镜像
-f,–filter=[]
–no-trunc=false:显示完整的镜像ID
-q,–quiet=false
仓库
仓库是一系列镜像的集合
标签
同一个仓库中的镜像用标签来区分,不同标签可能对应同一个镜像ID
删除指定镜像
docker rmi 镜像ID或仓库名+标签
删除所有镜像
docker rmi `docker images -q`
获取和推送
- 搜索镜像
从官网搜索镜像https://hub.docker.com/
命令行搜索:
docker search
- 拉取镜像
docker pull 仓库名:标签名
- 推送镜像
docker push 仓库名
需要登录
构建镜像
保存修改的内容,后面可以使用构造的镜像来运行容器同时使用之前修改的内容
通过容器构造
docker commit 容器名 镜像名
-a,–author="":作者
-m,–message="":镜像信息
-p,–paause=true:是否暂停正在执行的容器
通过Dockerfile
构建
docker build -t 镜像名
查看构建过程
docker history
构建好的镜像可以用docker images
命令查看
Dockerfile
组成:大写命令+小写参数
# 这是注释
FROM ubuntu:14.04 # 指定镜像:标签
MAINTAINER dormancypress "123@qq.com" # 镜像作者信息
RUN apt-get update # 在容器构建时执行命令
RUN apt-get install -y nginx
EXPOSE 80 # 正定运行该镜像容器使用的端口
CMD # 在容器运行时执行的命令
ENTRYPOINT # 与CMD相同 但不会被docker run指令覆盖
ADD # 复制文件,带有类似tar的解压功能
COPY # 复制文件,单纯复制推荐
COLUME #
WORKDIR # 指定工作目录
ENV # 设置环境
USER # 指定用户身份执行,默认用root执行
ONBUILD # 镜像触发器
执行dockerfile
首先进入到Dockerfile所在目录,然后执行命令
docker build -t bitcoinpaygate/regtest-bitcoind:latest .
参数是镜像名:标签名和上下文(.)
创建完成镜像即可打开容器
docker run --name regtest -it bitcoinpaygate/regtest-bitcoind:latest bash
docker守护进程操作
sudo service docker start/stop/restart
运行docker hub上的镜像
下载镜像
docker pull huangguoji/lnmp
如果不指定标签,默认会加上:latest
标签
以该镜像运行容器
docker run -it huangguoji/lnmp:latest bash
如果仅运行一次,可以加上--rm
,当容器退出会自动删除容器
文件传输
容器和宿主机传输
通过容器id
或名字查到容器的长id
docker inspect 549288a2fc7f
然后在宿主机中用docker cp
或mv
命令即可,注意容器id
后面的冒号
docker cp 549288a2fc7f74e63de13e37a2aae0db59af6543696fd29530175a1bd757b518:/root/go/main.go /root
docker cp /root/main.go 549288a2fc7f74e63de13e37a2aae0db59af6543696fd29530175a1bd757b518:/root/go
FTP工具
在创建容器的时候需要绑定端口映射
docker run --name containername -p 3000:80 -p 3001:21 -d dockerimagename