Docker基本操作

137 阅读4分钟

一、Docker常用命令

#安装docker
1、安装docker:sudo apt-get install -y docker.io
2、启动docker服务:systemctl start docker
3、设置开机启动:systemctl enable docker
查看docker版本:docker --version
查看Docker cpu/内存占用状态:docker stats --help
查看Docker状态:systemctl status docker

#docker重启
启动:systemctl start docker
守护进程重启:systemctl daemon-reload
重启docker服务:systemctl restart docker / service docker restart
关闭:docker service docker stop / docker systemctl stop docker

#镜像
查看Images库:docker images
查看docker云端可用镜像:docker search nginx(镜像名称) 
docker search -s 300 nginx(搜star数量大于300的)
(可提前修改配置文件 一遍获取最新最全的镜像文件)
拉去已知镜像:docker pull nginx 镜像名称
删除镜像:docker rmi nginx
删除所有镜像:docker rmi $(docker images -q)
更新镜像:docker run -t -i ubuntu:15.10 /bin/bash

#容器
查看正在运行的容器列表 docker ps
查看最后一次启动的容器 docker ps -l
查看所有容器 docker ps -a
查看容器的某些进程PID:doker top 名称
启动所有容器 docker start $(docker ps -a -q)
启动某个容器 docker start b750bbbcfd88
重启某个容器:docker restart 容器名/ID
停止某个容器:docker stop <容器 ID/Name>
停止所有容器:docker stop $(docker ps -a -q)
删除某个容器:docker rm name
删除某个正在运行的容器:docker rm name -f(强制)
删除所有容器:docker rm $(docker ps -a -q)

#复制文件到容器 
docker cp sentinel.conf redis-master:/usr/local/redis
sentinel.conf:本地文件路径
redis-master:容器长id或短id或容器名称
/usr/local/redis:容器目标路径
亦可反向,从容器拷贝到本地路径

#进入容器
进入容器方式1:docker exec -it 容器ID/容器别名称 /bin/bash 
进入容器方式2:sudo docker attach 44fc0f0582d9 
进入容器方式3:docker exec -it nginx bash(sh)
如果想修改容器的文件,需要用管理员模式进入:--user root(-u root)
退出容器:键盘操作 Ctrl + D (退出容器且关闭) ctrl+p+q 退出容器但不关闭  或者 exit

#查看容器信息
查看容器所有状态信息:docker inspect 容器名/ID
查看容器ip地址:docker inspect --format='{{.NetworkSettings.IPAddress}}' ID/NAMES
查看容器运行状态:docker inspect --format '{{.Name}} {{.State.Running}}' NAMES
查看容器的长ID: docker inspect -f '{{.ID}}' 8b89816347fa(此为短id)

查询容器log(即控制台信息):docker logs 容器名称
例如列印容器portainer應用後10行的內容。
docker logs --tail="10" <container_name>


查看网络模式 docker network ls

二、Docker打包镜像容器

  1. 打包镜像:
docker build --no-cache -t net5api:v1 -f Dockerfile .
#--no-cache:每次打包都会更新基础镜像,不会依赖缓存
#-t:镜像名称:版本
#-f:dockerfile文件路径,当前目录则可省略
#.:镜像构建过程中的上下文环境的目录
  1. 运行容器:
docker run -d -p 5051:5051 -v /container-data/net5api/published:/app --restart=always --name net5api net5api:v2
#-d 表示在后台以守护态(daemonized)形式运行容器
#-p 外部端口与内部容器端口映射,指定物理主机5051端口映射到docker容器5061端口
#-v 将docker容器内的app文件夹挂载到物理主机的/container-data/netapi/published路径,实现容器文件持久化,两个文件夹互相映射,谁有改变另一个也会跟着变
#--restart 指定容器开启自启动
#--name 指定容器的名称。当然可以不指定,默认会为我们创建
# 最后一个参数net5api:v1 就是我们刚创建的镜像名称
后台创建并运行容器 docker run -itd --name nginx1 -p 80:80 nginx /bin/bash
创建并指定容器IP:docker run -it --name nginx --network=dockercompose --ip 172.19.0.6 --restart=always  nginx
创建并指定容器端口:docker run --name nginx -p 80:80 --restart=always  -d nginx
创建前配置挂载文件:docker run --name nginx -p 80:80 --restart=always 
-v /app/MyNginx/nginx.conf:/etc/nginx/nginx.conf 
-v /app/MyNginx/log:/var/log/nginx 
-v /app/MyNginx/default.conf:/etc/nginx/conf.d/default.conf -d nginx

参数说明:
--name 给你启动的容器起个名字,以后可以使用这个名字启动或者停止容器
-p 映射端口,将docker宿主机的80端口和容器的80端口进行绑定
-v 挂载文件用的,(-v 本地目录:容器目录  或 -v 容器目录) 
第一个-v 表示将你本地的nginx.conf覆盖你要起启动的容器的nginx.conf文件,
第二个表示将日志文件进行挂载,就是把nginx服务器的日志写到你docker宿主机的/home/docker-nginx/log/下面 
第三个-v 表示的和第一个-v意思一样的。
-d 表示启动的是哪个镜像
-it 交互式运行
  1. 导入导出镜像
将当前使用的容器打包为新的镜像:docker commit XXXXXX newName
保存镜像:docker save > nginx.tar nginx:latest 其中-o和>表示输出到文件,nginx.tar为目标文件,nginx:latest是源镜像名(name:tag)
加载镜像:docker load -i nginx.tar 其中-i和<表示从文件输入。会成功导入镜像及相关元数据,包括tag信息
导出容器:docker export -o nginx-test.tar nginx-test   其中-o表示输出到文件,nginx-test.tar为目标文件,nginx-test是源容器名(name)
导入容器:docker import nginx-test.tar nginx:imp

三、容器内安装软件工具

在容器中安装需要先配置镜像源,linux用的是ubuntu镜像源,路径:/etc/docker/daemon.json
而docker容器用的是debian镜像源/etc/apt/sources.list,下载慢时需要切换镜像源。
一般我们修改/etc/apt/sources.list文件,将 Debian 的默认源地址改成新的地址即可,比如将 deb.debian.org 改成 mirrors.163.com, 可使用以下这条命令:

#进入容器,使用sed命令替换debian镜像源
sed -i 's#http://deb.debian.org#https://mirrors.163.com#g' /etc/apt/sources.list
#切换完成后,使用指令安装nano软件包
apt-get update
apt-get install nano

163镜像站:

deb mirrors.163.com/debian/ buster main non-free contrib
deb mirrors.163.com/debian/ buster-updates main non-free contrib
deb mirrors.163.com/debian/ buster-backports main non-free contrib
deb mirrors.163.com/debian-secu… buster/updates main non-free contrib

deb-src mirrors.163.com/debian/ buster main non-free contrib
deb-src mirrors.163.com/debian/ buster-updates main non-free contrib
deb-src mirrors.163.com/debian/ buster-backports main non-free contrib
deb-src mirrors.163.com/debian-secu… buster/updates main non-free contrib

四、修改Docker容器内文件

  1. 通过exec指令进入容器,装nano,通过nano开启文件修改

  2. 用docker cp指令,将文件拷贝到本地,修改后再cp回去

  3. docker run时,用-v映射docker容器内的文件到本地实体路径,通过修改实体路径的文件,自动docker内的文件也会跟着改变

    推荐使用方法3,永久有效

五、 修改Docker编码方式:

# 1. 进入容器,追加编码到指定文件,只能临时修改,容器移除重新运行失效
echo "export LANG='C.UTF-8'" >> /etc/profile
# 2. 永久修改,在bulid使用的dockerfile文件加入
ENV LANG C.UTF-8

locale:看系统使用了哪些字符集
locale -a: 看系统自带了哪些字符集

六、配置加速器(镜像源)

新增或编辑docker源配置文件:sudo vim /etc/docker/daemon.json

#添加镜像源
{    
    "registry-mirrors": [ 
            "http://hub-mirror.c.163.com"
        ]
}

科大镜像:docker.mirrors.ustc.edu.cn/
网易:hub-mirror.c.163.com/
阿里云:https://<你的ID>.mirror.aliyuncs.com (tk50dntr.mirror.aliyuncs.com)
七牛云加速器:reg-mirror.qiniu.com

然后重新加载下配置,再重启docker生效:
sudo systemctl daemon-reload
systemctl restart docker