this post was submitted on 25 Feb 2024
154 points (91.4% liked)

Linux

48245 readers
506 users here now

From Wikipedia, the free encyclopedia

Linux is a family of open source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991 by Linus Torvalds. Linux is typically packaged in a Linux distribution (or distro for short).

Distributions include the Linux kernel and supporting system software and libraries, many of which are provided by the GNU Project. Many Linux distributions use the word "Linux" in their name, but the Free Software Foundation uses the name GNU/Linux to emphasize the importance of GNU software, causing some controversy.

Rules

Related Communities

Community icon by Alpár-Etele Méder, licensed under CC BY 3.0

founded 5 years ago
MODERATORS
 

I installed a few different distros, landed on Cinnamon Mint. I'm not a tech dummy, but I feel I'm in over my head.

I installed Docker in the terminal (two things I'm not familiar with) but I can't find it anywhere. Googled some stuff, tried to run stuff, and... I dunno.

I'm TRYING to learn docker so I can set up audiobookshelf and Sonarr with Sabnzbd.

Once it's installed in the terminal, how the hell do I find docker so I can start playing with it?

Is there a Linux for people who are deeply entrenched in how Windows works? I'm not above googling command lines that I can copy and paste but I've spent HOURS trying to figure this out and have gotten no where...

Thanks! Sorry if this is the wrong place for this

EDIT : holy moly. I posted this and went to bed. Didn't quite realize the hornets nest I was going to kick. THANK YOU to everyone who has and is about to comment. It tells you how much traction I usually get because I usually answer every response on lemmy and the former. For this one I don't think I'll be able to do it.

I've got a few little ones so time to sit and work on this is tough (thus 5h last night after they were in bed) but I'm going to start picking at all your suggestions (and anyone else who contributes as well)

Thank you so much everyone! I think windows has taught me to be very visually reliant and yelling into the abyss that is the terminal is a whole different beast - but I'm willing to give it a go!

(page 2) 50 comments
sorted by: hot top controversial new old
[–] [email protected] -2 points 8 months ago (1 children)

OP: chatGPT is your personal Linux guru. Pretend it's your friend who knows everything about linux and tell it what you want to achieve.

Paste in any error messages and it will tell you how to fix them. Just make sure it knows what distro you're using first.

That's how I learned to use docker :)

[–] [email protected] 4 points 8 months ago (3 children)

except it makes up so much shit that it's harmful past extremely noob stuff

[–] [email protected] 2 points 8 months ago

Well making mistakes is how you learn stuff. Do all this on a vm that you can blow away and start over when you do screw up. So ChatGPT giving you crap advice can still be very useful. Sometimes the wrong answer can lead you to the right one.

load more comments (2 replies)
[–] [email protected] 16 points 8 months ago

I can at least assure you that as a developer, docker is annoying to set up and their documentation is confusing.

Most things in Linux are easier to set up but sometimes installing things happens to be harder than it should be and docker is one of them.

You should keep in mind that compared to other OSs, a lot of Linux software is CLI only, so they won't always show up in the applications list and you'll need to check if you have it in a terminal.

[–] [email protected] 1 points 8 months ago (1 children)

podman is better but thats just my opinion btw

load more comments (1 replies)
[–] [email protected] 7 points 8 months ago

There is lazydocker which gives a visual interface to docker in the terminal window. May be worth looking into.

[–] [email protected] 8 points 8 months ago

Docker's hard. I never really got my head around it. I used "Swizzin Community Edition" to setup my media server. It was really easy compared to Docker-based solutions.

[–] [email protected] 19 points 8 months ago

Docker is professional software and because of that isn’t always the most intuitive thing to use.

The first big thing to get your head around is that there is no GUI. Everything you do to manage docker is through the command line. If you really want to, there’s some third party GUI software for managing Docker, but I haven’t used it in the 2 years I’ve been using Docker.

Once you’ve installed docker, there’s a little bit of setup required to make it run smoothly. The Docker Docs page on Linux post-installation steps has detailed instructions on how to do that and how to run a test container

[–] [email protected] 9 points 8 months ago* (last edited 8 months ago)

I think it will be easier to use docker compose with a premade docker compose file.

Create a new directory cd into it and then nano docker-compose.yaml. For instance, here is a docker compose I found one the audio bookshelf website:

version: "3.7"
  services: 
    audiobookshelf:
      image: ghcr.io/advplyr/audiobookshelf:latest
      ports: - 13378:80
      volumes:
        - </path/to/audiobooks>:/audiobooks
        - </path/to/podcasts>:/podcasts - </path/to/config>:/config
        - </path/to/metadata>:/metadata

https://www.audiobookshelf.org/docs/#docker-compose-install

[–] [email protected] 33 points 8 months ago

Once it’s installed in the terminal, how the hell do I find docker so I can start playing with it?

Type docker in the terminal, it's a CLI application.

But it sounds like you might want to install Docker Desktop, which does give you a GUI to use.

[–] [email protected] 6 points 8 months ago (1 children)

I don't mean to be that guy but like did you even read a basic tutorial? Or did it install and the docker commands aren't working still?

[–] [email protected] 3 points 8 months ago
[–] [email protected] 12 points 8 months ago (2 children)

I remember being so lost in the dark when starting docker. There's 2 main approaches to launching docker containers. One is with CLI arguments and one is from a docker-compose.yml file.

I highly recommend the latter.

Try going to chatGPT and ask it to write a docker compose file for whatever service you're trying to stand up.

[–] [email protected] 2 points 8 months ago

It is a much better way to run volatile server apps that are changing at breakneck speed.

[–] [email protected] 11 points 8 months ago

There's no point in asking ChatGPT for a generic compose, most docker images will recommend a compose that's specifically written for them.

[–] [email protected] -3 points 8 months ago

If you're not planning to actually learn Docker, use an LLM AI to help you out. I just tried the following prompt in Gemini "generate docker-compose.yml that runs audiobookshelf and Sonarr with Sabnzbd" and it generated something that looks reasonable. Then you can follow it up with prompts like "how do I auto start it on linux?" and it will generate the systemd unit, and also tell you what commands to run.

[–] [email protected] 33 points 8 months ago (1 children)

To be fair, you're taking on a lot of new things at once. You can spin up docker containers on windows too, all while using a UI. I think it's great your exposing yourself to self hosting, linux, command line interface, and containerization all at once, but don't beat yourself up for it taking longer than expected. A lot of it takes time. I encourage you to keep trying and playing. Good luck!

[–] [email protected] 14 points 8 months ago* (last edited 8 months ago) (1 children)

There is docker desktop on Linux too.

sudo apt install docker flatpak -y
# add flathub if not already there
flatpak install docker

Edit: please use Podman. And if you think about Virtualbox, please use Virt-manager instead. Both are RedHat products and they are pretty awesome. Podman is more secure and works well for your job, it is letter-for-letter compatible with docker. You can use podman-compose if you need) but that requires to run a daemon which is also possible.

You can use Podman with many container sources natively, while docker only allows dockerhub. Says enough.

[–] [email protected] 4 points 8 months ago (1 children)

Not recommended as for one it is proprietary and two its more confusing to have tons of buttons than it is to write a docker compose.

[–] [email protected] 1 points 8 months ago (1 children)

I mean I would recommend them to use Podman. Docker on Linux Mint was a mess last time I used it.

[–] [email protected] 3 points 8 months ago (1 children)

Why?

It seems like podman would be way harder as you need to configure systemd and manage containers yourself.

With docker compose you apply it and docker creates the containers you need.

[–] [email protected] 1 points 8 months ago (1 children)

I dont know if you still need an external repo for docker, podman is in the system repo.

When using Containers it works the same. Yes systemd stuff may be manual thats what Podman Desktop is probably for.

Its more secure, more free and when learning it new anyways, why not the better tool?

[–] [email protected] 3 points 8 months ago* (last edited 8 months ago) (1 children)

Podman is not really a replacement for docker. It is its own separate thing and it has trade offs with docker.

The reason I use podman on my local machine and for Jellyfin is that it is darn fast. It makes docker look like a emulator by comparison. With that being said the issue with podman is mostly permission related. However, it also has some instability in cases where a container malfunctions. This often is happens when you try to stop and start a container at the same time.

Once that happens the runtime effectively locks up as the system is in a state that it doesn't know how to handle.

Some of the benefits of docker include its ability to recover from just about anything. If you need a container to always be available docker can do that. It also can do on the fly patching and self healing.

Docker compose is very nice to have for larger software with multiple containers. I can write a docker compose that builds and deploys my nodejs applications with a database back end and it will just work without any issues. Deploy it and you are good.

[–] [email protected] 2 points 8 months ago (1 children)

Thanks for the info, I have little personal experience especially with compose.

How is podman compose after setting it up?

[–] [email protected] 2 points 8 months ago

Podman compose is very much lacking and breaks easily (don't use it)

[–] [email protected] -1 points 8 months ago* (last edited 8 months ago) (1 children)

Sudo docker will do the trick. Docker does some networking shit so it needs admin privileges

Don't give up, don't listen to goober 🤓 itt telling you to read manpages that shit is worthless.

[–] [email protected] 5 points 8 months ago

Better yet, add yourself to the Docker group. You shouldn't have to Sudo it

[–] [email protected] 23 points 8 months ago (2 children)

I'm also pretty new to Linux, but I've finally gotten a bit of a grasp on it. I started learning Linux to set up a home server, so I also jumped straight into Docker. You have gotten some thorough replies, but I thought I'd share my chaotic journey with it that has ended in a decent ratio of success vs confusion. Note: I have used Ubuntu from the start.

Don't use docker desktop. It's garbage. Also, don't use the Snap image.

$sudo apt install docker.io

$sudo apt install docker-compose

Those are both cli "programs". They aren't apps like you have on Windows. It seems VERY intimidating to talk into the void of the terminal, but you'll build confidence. Docker commands work like any other commands, all in the same place.

Now install Portainer CE. The instructions are very simple to follow. You can reach Portainer through your browser at the localhost address it gives you, which you type directly into the URL bar. I think it's http://localhost:9000.

Portainer will give you an easy visual way to manage Docker. You can perform many tasks through Portainer instead of using the command line. Honestly, I'm pretty sure you could do everything on Portainer and not even touch the terminal. I don't suggest that because you will have to have at least a basic understanding of how Linux and Docker work. You will be confused, and you will feel crazy. Eventually, you'll get more comfortable living in that psychosis.

On to Docker Compose!! This is my preferred way to run containers. I have a designated folder in /opt that I use for my compose files. This way, I know exactly how I set up my programs. My memory is awful and I tweak things so often that I'll completely forget how I have even gotten to this point or where ANY of my files are. It's pretty easy to find docker compose files online that you can copy and paste and it instantly works!

To make it simple, after I have saved my docker-compose.yaml file in the designated folder, I right click on the empty area and choose "open in terminal".

$sudo docker-compose up -d

The -d instructs the program to continue to run, even if you exit out of the terminal. At this point, your container will also show up in portainer!

I think that covers the basics. My biggest tip is to keep a notepad handy to write down commands that you have to search for. Your bookmarks will fill up very quickly otherwise. Expect to get stuck sometimes. Expect to spend hours trying to troubleshoot an issue, then have it suddenly work with no idea what you actually did to fix it. Accept the win and never touch it again.

I have done fresh installs many times. Some because I've played with 10 different programs that I decided against and want the leftover files gone, some because I wanted to try different mixes of distros, and once because I legitimately broke the OS.

Keep your important stuff on an external drive to avoid any loss and don't be afraid to mess around with it!

Btw, I'm a huge KDE plasma fan. It's lighter than GNOME, but very user friendly. I've settled on Kubuntu as my distro of choice.

[–] [email protected] 7 points 8 months ago (1 children)

Don't use docker-compose anymore, it's been obsolete for a while now and won't be getting new features.

It's best to add the docker official repo and install docker and docker-compose-plugin from there.

The -plugin version acts as a docker subcommand (docker compose) and will be updated alongside docker going forward.

load more comments (1 replies)
[–] [email protected] 5 points 8 months ago

Well said. I've been using Linux for 15 years and using Docker for 6 years. I couldn't have communicated as well as you did. You have a knack for teaching.

[–] [email protected] 1 points 8 months ago* (last edited 8 months ago)

Try a more managed and out-of-the-box solution first, then work your way down to the commandline. I'd recommend one of the NAS solutions like openmediavault (if they still do docker) or https://cockpit-project.org/

or Docker for Desktop or podman.io

(maybe lxc containers with proxmox or unraid)

[–] [email protected] 28 points 8 months ago (3 children)

Docker is one of the container technologies

Containers vs Images

This is a very simplified explanation, which hopefully clears up for you. As with all simplifications, they aren't entirely correct.

Containers put processes, files, and networking into a space where they are secluded from the rest. You main OS is called the host and the container is called the guest. You can selectively share resources with the guest. To use an analogy, if you house were the computer with linux, if you took a room, put tools and resources for those tools into it, put workers into it, got them to start working and locked the door, they'd be contained in the room, unable to break out. If you want to give workers access to resources, you either a window, a corridor, or even a door depending on much access you want to give them.

Containers are created from an image. Think of it as the tools, resources, and configuration required every time you create a room in your house for workers to do a job. The woodworkers will need different tools and resources than say metalworkers.

Most images are stored on DockerHub. So when you do docker pull linuxserver/sonarr you download the image. When you do docker run linuxserver/sonarr you create a container from an image.

Installation

You're on Cinnamon Mint which is linux distribution derived from another linux distribution called debian. You have to follow the installation instructions. Everything is there. If something doesn't work, it's most likely because you skipped a step. The most important ones are the post-installation steps:

  • Adding your user to the docker group
  • Logging out and back in (or simply restarting)

Those are the most commonly missed steps. I've fallen for this trap too!

Local help

To use linux, you need to learn about ways to help yourself or find help. On linux, most well-written programs print a help. Simply running the command without any arguments most often output a help text --> running docker does so. If they don't, then the --help flag often does --> docker --help. The shorthand is -h --> docker -h.

Some commands have sub commands e.g docker run, docker image, docker ps, ... . Those subcommands also take flags of which -h and --help are available.

The help output is often not extensive and programs often have a manual. To access it the command is man --> man find will output the manual for the find command. Docker doesn't have a local manual but an online one.

For clarification when running a command there are different ways to interpret the text after the command:

Flags/Options

These are named parameters to the command. Some do not take input like -h and --help which are called flags. Some do like --file /etc/passwd and are often called options.

Arguments

These are unnamed parameters and each command interprets them differently. echo "hello world" --> echo is the command and "hello world" is the argument. Some commands can take multiple arguments

Running containers

Imperatively

As described above docker run linuxserver/sonarr runs an image in a container. However, it runs in the foreground (as opposed to the background in what is most often called a "daemon"). Starting in the foreground is most likely not how you want to run things as that means if you close your terminal, you end the process too. To run something in the background, you use docker run --detatch linuxserver/sonarr.

You can pass options like -v or --volume to make a file or folder from your host system available in the guest e.g -v /path/on/host:/tmp/path/in/guest. Or -p / --port to forward a host port to a guest port e.g -p 8080:80. That means if you access port 8080 on your host, the traffic will be forwarded to port 80 in the guest.

These are imperatives as in you command the computer to do a specific action. Run that docker image, stop that docker container, restart these containers, start a container with this port forward and that volume with this user ...

Declaratively

If you don't want to keep typing the same commands, you can declare everything about your containers up front. Their volumes, ports, environment variables, which image is used, which network card/interface they have access to, which other network they share with other containers, and so on.

This is done with docker-compose or docker compose for newer docker versions (not all operating systems have the new docker version).

This already a long text, so if you want to know more, the best resource is the docker compose manual and the compose file reference.


Hopefully this helped with the basics and understanding what you're doing. There are probably great video resources out there that explain it more didactically than I do with steps you can follow along.

Good luck!

CC BY-NC-SA 4.0

load more comments (3 replies)
load more comments
view more: ‹ prev next ›