docker 安装和使用
目录
1、Linux 下 Docker 端口映射到宿主机后 外部无法访问对应宿主机端口
4、docker服务连接 mysql容器 出现连接不上的问题
1、安装docker的官方网站
配置镜像加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxxxxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
查看docker安装的版本
docker --version
重启docker
sudo systemctl restart docker
启动 docker
sudo systemctl start docker
查看启动的状态
sudo systemctl status docker
下载测试镜像 并且启动该容器
docker run hello-world
出现以上信息 说明安装成功
2、操作docker 镜像的常用命令
搜索镜像
docker search java [-- limit / -f(过滤结果) / --no-trunc (true/false) /--start -s (收藏数) ]
下载镜像
docker pull java
列出镜像
docker images java
删除本地镜像
docker rmi hello-world
在删除本地镜像前 要去查看是否有容器在引用此镜像 如报一下错误 Error response from daemon: conflict: unable to remove repository reference "hello-world:latest" (must force) - container fc82f6cea8b0 is using its referenced image fce289e99eb9
则使用以下命令
保存镜像到本地
docker save hello-world > hello.tar
docker --output hello.tar hello-world
加载镜像到docker仓库
docker load < hello.tar
构建镜像
docker build -- 看书查看详细的执行
3、docker 容器常用命令
1、启动docker容器
docker run -d -p 8080:8080 XXX
#-d 后台运行
#-P 随机映射所有的端口 (大P)
#-p 指定端口映射
# ip:hostPort:containerPort (地址:主机端口号:容器端口号)
# ip::containerPort
# hostPort:containerPort
# containerPort
#--network 指定网络格式
# --network=bridge 默认 网桥模式
# --network=host 容器使用主机的网络
# --network=container:NAME_or_ID (容器的名称或者id) 使容器使用已有的容器的网络配置
# --network=none 不配置该容器网络 用户可以自定义配置网络
2、列出容器
docker ps -a
#-a 列出全部运行的容器
#-f 条件过滤
#--format
#-n 显示最近创建的n个容器 -n 10
#-l 显示最近创建的容器(包含所有的状态)
#--no-trunc 不截断输出
#-q 只展示容器id
#-s 显示总文件的大小
3、停止容器
docker stop
#-t 强制停止容器前等待的时间 单位是秒 s
4、强制停止容器
docker kill
#-s 向容器发生信号 kill
5、启动已经停止的容器
docker start
6、重启容器
docker restart
#-t 关闭容器前等待的时间
7、进入容器内部
docker exec -it 容器id /bin/bash
docker attach 容器id
8、删除容器
docker rm
#-f 强制删除正在运行的容器
#-l 删除容器间的网络连接
#-v 删除与容器管理的卷
#删除所有的容器
docker rm -f $(docker -a -q)
9、导出容器
docker export
#-o 将内容写到文件
docker export red_panda > latest.tar #导出red_panda 为 latest.tar 文件
docker export --output="latest.tar" red_panda
10、导入容器
docker import
#-c 将Dockerfile 指令应用到创建的镜像
#-m 为导入的镜像设置提交的信息
docker import latest.tar rep_panda
问题记录
1、Linux 下 Docker 端口映射到宿主机后 外部无法访问对应宿主机端口
描述:在ubuntn 服务下启动了tomcat 容器,使用虚拟机的地址加映射的端口 无法访问到tomcat容器,进入tomcat容器,使用curl "localhost:8080"命令请求服务,发现tomcat是启动的。
原因是:我的宿主机没有开启ip 转发功能,导致了外部请求过来没有转发到docker 映射的端口号上。
编辑 :
vi /etc/sysctl.conf
修改
重启网卡 和重启docker 服务
#重启网卡
/etc/init.d/networking restart
#重启docker
systemctl restart docker
2、 查单某一个容器的日志信息
docker logs -f -t 0d8a3a91c04c(容器id)
3、docker 运行jar 文件
编写Dockerfile 文件 输入一下内容
FROM java
VOLUME /tmp
ADD schoolweb-0.0.1-SNAPSHOT.jar app.jar
RUN bash -c 'touch /app.jar'
EXPOSE 84
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
构建容器
docker build -t shcool/0.0.1 .
4、docker服务连接 mysql容器 出现连接不上的问题
#查看当前容器的ip地址
docker insepect [容器名称、容器id]
将此ip地址进行替换
5、docker 启动mysql 乱码
编辑该配置文件
vim /etc/mysql/mysql.conf.d/mysqld.cnf
[mysql]
default-character-set = utf8
[mysql.server]
default-character-set = utf8
[mysqld_safe]
default-character-set = utf8
[client]
default-character-set = utf8
[mysqld]
character_set_server=utf8
init_connect=’SET NAMES utf8’
6、docker 容器 映射https 端口
使用一下命令启动容器
docker run -d -p 80:80 -p 443:443 xxx(容器名称) 映射80 和 443端口 。