docker常用命令总结

2023-10-17 08:20:51 浏览数 (1)

docker

应该早点学习docker的,真的特别好用。

使用最重要的就是清楚端口映射

代码语言:javascript复制
例如:docker run -d -p 8080:8080 tomcat
代码语言:javascript复制
个人开启docker之后的常用命令
docker ps -aq
docker ps
docker start mysql57
docker exec -it 容器id bash
1、安装

个人推荐使用第二种方式,第一种安装方式安装的是 1.13.1 的版本,第二种安装的是最新版,我今天安装完之后是 20.10.8 版本。

代码语言:javascript复制
第一种安装方式:
yum install docker -y

Dokcer hub镜像加速
/etc/docker/daemon.json
{"registry-mirrors":["https://gg3gwnry.mirror.aliyuncs.com"]}

第二种安装方式:

需要的安装包
yum install -y yum-utils

设置镜像的仓库
yum-config-manager 
    --add-repo 
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
更新yum软件包
yum makecache fast

安装社区版
yum install docker-ce docker-ce-cli containerd.io   

可以配置一个阿里云加速镜像 加快下载速度
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://a5pog71k.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

测试

代码语言:javascript复制
显示出版本信息  测试一下就可以了
docker version	(或者输入 docker -v 或者 docker --version)
查看docker系统信息
docker info
查看所有帮助命令
docker
查看某个命令的帮助信息  (command 例如:docker run --help)
docker commond --help 

启动

代码语言:javascript复制
启动docker
systemctl start docker

停止docker
systemctl stop docker

重启docker
systemctl restart docker

查看docker运行状态
systemctl status docker

查看docker进程
ps -ef | grep docker

设置docker开机自启动
systemctl enable docker

设置容器开机自动启动
创建容器时,设置自动启动容器
docker run --restart=always 容器id(或者容器名称)

如果创建时未指定 --restart=always ,可通过update 命令设置
docker update --restart=always  容器id(或者容器名称)
2、镜像命令
代码语言:javascript复制
查看下载的镜像
docker images

只查看镜像id
docker ps -aq

搜索镜像
docker search tomcat

搜索镜像,收藏数大于3000的
docker search mysql --filter=STARS=3000

下载镜像   默认最新版本   docker pull 镜像名[:tag] 
docker pull mysql

下载mysql5.7
docker pull mysql:5.7

删除镜像 空格删除多个容器
docker rmi -f 镜像id

删除所有镜像
docker rmi -f $(docker images -aq)

保存新镜像,这样每次修改完 数据都还在,可理解为Linux的快照
docker commit 容器id 镜像名
比如:docker commit es48s4ds5se mysql0812
3、容器命令
代码语言:javascript复制
下载一个centos进行学习
docker pull centos

新建容器并启动
docker run [可选参数] image

# 参数说明
--name="Name"	容器名字,用来区分容器
-d				后台启动
-it				使用交互式运行
-p				指定容器端口	8081:8080
	-p  ip:主机端口:容器端口
	-p	主机端口:容器端口 常用
	-p  容器端口
	容器端口
-P				随机指定端口

列出所有运行的容器
docker ps
-a		正在运行的容器
-n=?	显示个数  最近创建的容器
-q		只显示id

查询启动的容器id
docker ps -aq

启动并进入centos容器
docker run -it centos /bin/bash

退出
exit		# 直接容器停止并退出
Ctrl  P  Q  # 容器不停止退出

删除指定容器
docker rm 容器id

删除所有容器
docker rm -f $(docker ps -aq)

管道符删除  删除所有
docker ps -a -q|xargs docker rm

启动容器  一般启动的时候都会进行端口映射(docker run -d -p 8080:8080 tomcat)
docker start 容器id

查看容器的更多信息
docker inspect 容器id/名称

进入docker容器(71858d5c1af9   容器id,最后的那个/bin/bash可以直接写 bash)
docker exec -it 71858d5c1af9 /bin/bash

重启容器
docker restart 容器id

停止容器
docker stop 容器id

停止全部运行中的容器
docker stop $(docker ps -q)

停用并删除容器
docker stop $(docker ps -q) & docker rm -f $(docker ps -aq) 

强制停止当前容器
docker kill 容器id
4、其他命令
代码语言:javascript复制
后台启动  -d
docker run -d 镜像名

查看日志
docker logs -f -t --tail 容器id
-tf 	显示日志
--tail n 显示多少行

查看容器中的进程信息
docker top 容器id

查看容器详细信息	元数据
docker inspect 容器id

进入当前运行的容器
方式1: docker exec -it 容器id bash
方式2: docker attach 容器id     (它进入的是正在运行的窗口,正在执行)
区别:
exec    进入容器是一个新的终端
attach  不会启动新的进程

拷贝文件到主机
docker cp 容器id:容器内路径 主机的路径

查看CPU使用率
docker stat
5、使用案例
nginx
代码语言:javascript复制
下载nginx镜像
docker pull nginx
启动nginx   
docker run -d --name nginx01 -p 5555:80 nginx
参数解释:
-d			代表后台启动
--name  	相当于别名
-p			端口映射	第一个是Linux的端口,第二个是容器的端口
测试本机访问,然后再去浏览器访问
curl localhost:3344
tomcat
代码语言:javascript复制
下载镜像
docker pull tomcat
启动镜像
docker run -d -p 8081:8080 tomcat
zookeeper
代码语言:javascript复制
安装Zookeeper,开发分布式dubbo项目Zookeeper作为注册中心试验
下载镜像
docker pull zookeeper

启动
docker run -p 2181:2181 -d zookeeper

进入容器
docker exec -it 容器id bash

window可以使用客户端工具访问Zookeeper

zookeeper图形化的客户端工具(ZooInspector)
https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip
6、mysql数据持久化
代码语言:javascript复制
安装mysql  如果不指定版本默认就是8.x的版本,
docker pull mysql:5.7

启动mysql
docker run -p 3306:3306 -e MYSQL_DATABASE=mytest-e
MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

参数解读:
-p  端口映射
-e  环境变量
-d  后台启动
进入容器
docker exec -it ID号 bash
配置文件映射、数据库文件映射
docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql
 -e MYSQL_ROOT_PASSWORD=145263 --name mysql57 mysql:5.7
参数解释:
-d 		后台运行
-p 		端口映射
-v 		卷挂载
-e 		环境配置
--name 	容器名字

以后在启动的时候直接 (方便又快捷)
docker start mysql57 

 因为这个是mysql5.7的版本,使用Navicat测试,直接就连上了
 
mysql 8.x版本需要的配置

docker pull mysql

启动mysql
docker run -p 3306:3306 -e MYSQL_DATABASE=test-e
MYSQL_ROOT_PASSWORD=123456 -d mysql

进入容器
docker exec -it ID号 bash

登录mysql
mysql -u root -p

修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '145263';

授权远程登录访问
CREATE USER 'ligang'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

GRANT ALL PRIVILEGES ON*.* TO 'zhangsan'@'%';

设置root密码永不过期
alter user 'root'@'%' identified by '145263' password expire never;

修改加密方式
 alter user 'root'@'%' identified with mysql_native_password by '123456';
 
刷新权限
flush privileges;
7、jar包部署

方式1

代码语言:javascript复制
1、定义一个Dockerfile文件
FROM java
MAINTAINER zhangsan
ADD demo-1.0.0.jar /opt
RUN chmod  x /opt/demo-1.0.0.jar
CMD java -jar /opt/demo-1.0.0.jar
2、构建镜像
 docker build -t demo-1.0.0.jar .
3、运行容器: (8ed7368ff4c1) id号   
端口映射: docker run -d -p 8080:8080 8ed7368ff4c1
4、测试
curl localhost 8080

方式2

代码语言:javascript复制
1、定义一个Dockerfile文件
FROM  java:8
COPY *.jar /app.jar
CMD ["--server.port=8080"]
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
2、构建镜像
docker build -t xiaolizi .
3、运行容器  xiaolitest666 相当于容器的别名  xiaolizi 是镜像的名字
docker run -d -p 8080:8080 --name xiaolitest666 xiaolizi
4、测试
curl localhost 8080

部署war包

代码语言:javascript复制
1、定义Dockerfile文件
FROM tomcat
MAINTAINER zhangsan
ADD demo-1.0.0.war /usr/local/tomcat/webapps
EXPOSE 8080
CMD /usr/local/tomcat/bin/catalina.sh run
2、构建镜像
docker build -t demo-1.0.0.war .
3、运行镜像
docker run -d -p 8080:8080 7d8bb560d486
4、访问的时候加项目访问路径:demo-1.0.0

参数解释

命令

效果

FROM

基础镜像:Centos/Ubuntu/Java

MAINTAINER

镜像作者

RUN

镜像构建的时候需要运行的命令

ADD

为镜像添加内容(压缩包)

COPY

类似于ADD,将文件拷贝到镜像中

EXPOSE

暴露端口

CMD/ENTRYPOINT

指定这个容器启动时要运行的命令(CMD替代先前命令,ENTRYPOINT在先前命令后追加)

8、自定义镜像
代码语言:javascript复制
自定义JDK镜像  这个文件名是固定的,D大写
1、创建 Dockerfile 文件,写入配置信息(vim Dockerfile)
FROM centos:latest
MAINTAINER zhangtest
ADD jdk-8u241-linux-x64.tar.gz /usr/local
ENV JAVA_HOME /usr/local/jdk1.8.0_241
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin
CMD java-version

2、构建镜像
docker build -t zhango_jdk1.8.0_241 .
3、然后可以查看到自己的镜像
docker images
4、运行镜像就可以显示出JDK版本信息
docker run -d 容器id

解读

代码语言:javascript复制
FROM
格式为 FROM<image> 或 <image>:<tag>
Dockerfile文件的第一条指令必须为FROM指令,并且,如果在同一个Dockerfile中创建多个镜像时,
可以使用多个FROM指令(每个镜像一次);

MAINTAINER
格式为MAINTAINER<name>,指定维护者信息

ENV
格式为ENV<key><value>,指定一个环节变量,会被后续RUN指令使用,并在容器运行时保持

ADD
格式为ADD<src><dest> 复制到指定的<src>到容器中的<dest>

EXPOSE
格式为EXPOSE<port><port>...
告诉Docker服务端容器暴露的端口号,供互联系统使用,在启动容器时需要通过-p映射端口,
Docker主机会自动分配一个端口转发到指定的端口

RUN
格式为RUN<command>
RUN指令将在当前镜像基础上执行指定命令,并提交为新的镜像,当命令较长时可以使用来换行

CMD
指定启动容器时执行的命令,每个Dockerfile只能有一条CMD命令。
如果指定了多条命令,只有最后一条会被执行。
如果用户启动容器时指定了运行的命令,则会覆盖掉CMD指定的命令
可能遇到的错误

Error response from daemon: Cannot restart container 1740d55e9f32: driver failed programming external connectivity on endpoint mysql57 (1dd8cc83f8a80b632e05663f9e4757ce0af69bb6acf6ed8456a65afc88d46746): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 3310 -j DNAT --to-destination 172.17.0.2:3306 ! -i docker0: iptables: No chain/target/match by that name. (exit status 1))

代码语言:javascript复制
定位问题:docker服务启动时定义的自定义链DOCKER被清除
重启docker即可
systemctl restart docker

0 人点赞