docker常用命令
docker重启参数--restart=always的作用
docker重启参数--restart=always的作用_bjywxc的博客-CSDN博客_restart=always
yum install telnet.*
yum -y install net-tools.x86_64
问题
我们在创建基础容器之后,进入容器,进行编辑配置文件的时候,需要使用ifconfig,但是会出现:
bash: ifconfig: command not found
解决
使用如下命令安装:
apt install net-tools
如果执行错误,先执行一下命令:
apt-get update
Linux环境使用apt-get安装telnet、curl、ifconfig、vim、ping等工具【转】
https://www.cnblogs.com/east7/p/15834866.html
1、查看已安装的docker镜像:docker images
2、查看正在运行的docker镜像:docker ps
3、搜索可以安装的docker镜像:docker search mysql(例如mysql)
4、查看可以安装镜像版本:去https://hub.docker.com/search?q=&type=image上查询
5、安装官方最新镜像:docker pull mysql:版本号(例如mysql)也可以不带版本号,默认是latest
6、运行容器操作:docker run -itd --name mysql-sumengnan -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
参数:-e表示环境变量
-v $PWD/webapps:/usr/local/tomcat/webapps(把文件目录映射到宿主机目录)
-p:宿主机端口:容器端口
--name:容器名字
7、停止容器操作:docker stop 容器名字
8、删除容器:docker rm 容器名字
9、进入容器操作:docker exec -it 容器名字 /bin/bash
10、查看容器日志:docker logs 容器名字
11、查看容器中进程信息:docker top 容器名字
12、复制宿主机中的文件到容器:docker cp /root java:/root(复制宿主机root目录到docker容器java根下,并重命名为root。调换一下位置就是反向复制。源位置:目的位置)
13、导入本地镜像:cat sumengnan-3.2.6.tar.gz | docker import - sumengnan:3.2.6(镜像名自己定义)注意:镜像文件必须是tar.gz类型的文件。
14、保存镜像到本地:docker save -o sumengnan.tar(保存的文件名) sumengnan(镜像名)
15、载入镜像(再次导入镜像)docker load --input sumengnan.tar 或 docker load < sumengnan.tar
16、删除镜像:docker rmi -f image_id(镜像id,强制删除镜像)
17、删除none镜像:docker images|grep none|awk '{print $3 }'|xargs docker rmi -f
查看网络:docker network ls查
docker network详解、教程_wangyue23com的博客-CSDN博客_docker network
Dockerfile(构建镜像)
1、FROM openjdk:8-jre(基于哪个镜像)
2、COPY license.ckl /root(复制文件,复制宿主机文件到docker镜像中,可以使用通配符,如:?,*)
3、ADD license.ckl /root(复制文件:复制宿主机文件到docker镜像中,如果是压缩文件tar或其他,ADD命令会自动解压)
4、ADD /root/ /root(复制目录:复制宿主机目录到docker镜像中,把宿主机root文件夹下的内容,复制到docker的root文件夹下)
5、ENV java_version 1.8(定义环境变量,java_version=1.8,后续的指令中可以使用$java_version来引用)
6、VOLUME /tmp(挂载匿名卷到/tmp,后续可以通过docker run -v修改)
7、EXPOSE 8080(声明端口)
8、RUN apk update(在build构建过程中,要运行的命令,如更新apk包,安装某些服务等)
9、CMD java -jar /myjava.jar(镜像构建结束后要运行的程序,可以被docker run中指定要运行的程序覆盖)
构建镜像命令:docker build -t java:test .(如要构建一个叫java:test的镜像,后面有个点,指的是上下文,不能缺少)
构建镜像时不想使用缓存添加 --no-cache 参数。
24 个常见的 Docker 疑难杂症处理技巧 - 知乎
遇到的问题:
一、问题:docker pull mysql:latest下载不下来提示Pulling fs layer
导致此问题产生,主要是因为国家把docker国外镜像hub封掉了,导致镜像pull不下来,为此,改用国内的镜像
1、执行vim /etc/docker/daemon.json 编辑文件,修改成如下内容:
{
"registry-mirrors": ["https://hub.docker.com","https://hub.daocloud.io/","https://c.163.com/hub#/m/home/","https://docker.mirrors.ustc.edu.cn/","https://hub-mirror.c.163.com","https://registry.docker-cn.com","http://ef017c13.m.daocloud.io"],
"insecure-registries": ["10.0.0.12:5000"]
}
二、如何开启2375端口,提供外部访问docker?
1、修改服务文件
vim /usr/lib/systemd/system/docker.service
把文件行中修改成如下内容:ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock \
2、重新加载docker配置
systemctl daemon-reload // 1,加载docker守护线程
systemctl restart docker // 2,重启docker
注意:生产环境禁止使用远程访问docker,容易被黑。
如非要使用则需要增加ca证书认证:参考:https://docs.docker.com/engine/security/https/。
入侵过程:
1、黑客扫描到2375端口,使用docker -H tcp://baidu.com:2375连接。
2、使用docker run -v远程启动一个容器,并映射宿主机目录到虚拟机
3、使用docker exec -it 进入容器操作,并修改宿主机authorized_keys文件。
4、加入黑客的公钥,即可达到免密码登陆服务器的效果。
三、各个docker容器之间如何通信?
1、使用容器ip(各容器每次启动会有ip)
2、使用docker run --link mysql:db(mysql是容器名称,db是别名,通过容器名称(或别名)来访问,缺点是只能单向访问)
3、使用docker run --net=host(共享 Docker host 的网络栈,容器的网络配置与 host 完全一样。)
4、使用网桥(推荐):
- 1、执行docker network create test-network创建网络
- 2、执行docker run -it --network test-network --network-alias db(启动时加入test-network网络,容器取别名为db)
四、docker中没有vi或vim编辑器,甚至也没有yum和rpm命令怎么办?
可以用apt-get,先更新apt-get update,在安装vim:apt-get install vim
五、如何查看docker容器中装载的文件对应宿主机的位置?
容器启动时会返回容器id
执行:docker inspect 容器id 找到Mounts一栏,Type为volume的一项,Source属性的值就是对应宿主机的位置
六、docker build后执行docker run提示Error response from daemon: No command specified.
需要在docker run -it 后加上imageid,如:docker run -t -i 87e5b6b3ccc1 /bin/bash
七、docker build构建中使用git clone项目提示RPC failed; curl 56 OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno
需取消ssl验证,在Dockerfile中加入如下:
RUN git config --global user.name "zhangsan"
RUN git config --global user.email "123456789@qq.com"
RUN git config --global http.sslVerify "false"
八、docker中java项目容器和mysql服务容器可以ping通,用客户端Navicat也可以连接,但是项目就是连接不上mysql
后来发现,docker pull mysql时没有加版本号,就自动拉取了lastet最新版的mysql。
因为mysql版本太高,java项目的jdbc驱动无法连接高版本mysql,这就解释了为什么Navicat可以连接,java项目却不能连接的原因。
最终解决:改成低版本的mysql如:5.7
九、docker中mysql连接表名大小写敏感
在mysql配置文件my.cnf中添加lower_case_table_names=1(需要先安装vim编辑器或docker cp到宿主机修改完再cp回来)
完美解决Cannot connect to the Docker daemon at tcp://localhost:4243. Is the docker daemon running?
运行两个不同版本的mysql
docker run -d -p 80:80 httpd
root@iZbp1i561992iw7ww9i030Z ~]# docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql
64a4cd3019fc2e11c3dc1056b8bf1c7bb84f66dfb99e065e7d0e557823c50b62
[root@iZbp1i561992iw7ww9i030Z ~]# docker exec -it 64a4cd3019fc2e11c3dc1056b8bf1c7bb84f66dfb99e065e7d0e557823c50b62 /bin/sh
# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 8.0.26 MySQL Community Server - GPL
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
docker run -d --name mysql2 -p 3307:3307 -e MYSQL_ROOT_PASSWORD=root mysql:5.7
2c668f75491c6f638d8a123e2cc7090827beca20363c642319f4771ff5a76354
Docker之容器退出(实战)_天涯芳草-CSDN博客_docker 退出容器
Docker:Dockerfile 中 RUN, CMD, ENTRYPOINT 的区别
Docker:Dockerfile 中 RUN, CMD, ENTRYPOINT 的区别_netyeaxi的专栏-CSDN博客
docker run -d -p 8080:8080 tomcat
[root@iZbp1i561992iw7ww9i030Z ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/tomcat latest 6313f84af805 3 days ago 680 MB
docker.io/httpd latest 5ebe6e00baf9 2 weeks ago 138 MB
docker.io/mysql 5.7 1d7aba917169 5 weeks ago 448 MB
docker.io/mysql latest 0716d6ebcc1a 5 weeks ago 514 MB
docker.io/rancher/rancher v2.4.3 ddb8c914dee4 17 months ago 849 MB
docker.io/rancher/server stable 98d8bb571885 17 months ago 1.08 GB
docker.io/tomcat 7-jre7 47c156f4d4e3 2 years ago 359 MB
[root@iZbp1i561992iw7ww9i030Z ~]# docker run -d -p 8080:8080 tomcat:7-jre7
b9ebbe04c77bee443786ae4d904ea037a992e9d81e6fd228920a7fe83f1b9573
docker run -d -p 8081:8081 rancher/server:stable
afc74f6c3d7346312569e681f20e39167c116e04aef3fe5cb0fcbd7dda1d7323
rancher 页面显示有点问题
SecureCRT 访问本地Linux虚拟机NAT网络(VMware workstation 9+secureCRT+Ubuntu12.04) - babi - 博客园
VMware 如何通过现有虚拟机克隆新的虚拟机 (图文)_yigongye-CSDN博客_虚拟机克隆
sh -c的必要性
Linux下touch命令的使用
Linux下touch命令的使用 - Hackerman - 博客园
dockerfile中RUN bash -c 'touch /app.jar'
从命令本身看,是为了执行一个touch命令,前面的add命令把jar复制过去,后面touch命令的作用是修改这个文件的访问时间和修改时间为当前时间。